2012-01-05 1 views
0

나는 grouped table with 3 categories and one header above the first one이 있습니다. 나는 사용자가 그/그녀의 이름을 입력 한 후에 그 사람의 이름으로 자신을 업데이트하는 헤더 제목을 원한다. 첫 번째 응답자 (키보드)를 닫은 후에 reloadData 메서드를 textFieldShouldReturn에 넣었습니다. 그래도 작동하지 않는 것 같습니다. 머리글 제목은 동일하게 유지됩니다.iOS 새로 고침 헤더 제목

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    if(section == 0) 
    { 
     if(title==nil) 
      return @"Your name here..."; 
     else 
      return title; 
    } 
    else return nil; 
} 

title 제목 셀에서 텍스트를 포함해야 NSString이다.

다음 코드는 cellForRowAtIndexPath에서입니다 ....

UITextField *txt = [[ UITextField alloc ] initWithFrame:CGRectMake(100,10, 200, 30)];`` 
    txt.delegate = self; 
    [cell addSubview:txt]; 

    if(indexPath.section==0) 
    { 
     if([indexPath row] == 0) 
     { 
      [cell.textLabel setText:@"Name"]; 
      title = txt.text; 

     } 

감사합니다!

+0

'UITextField * txt = ...'이니셜 라이저가 호출되는 곳/방법을 보여주기 위해 원래 질문을 수정할 수 있습니까? 지금 당장은 alloc/init 메소드를 반복적으로 호출한다고 생각합니다. 따라서'title' 변수는 항상 NULL로 설정됩니다. –

+0

'reloadData'는 머리말과 꼬리말을 포함하여 테이블 셀이나 전체 테이블 만 다시로드합니까? – Teo

답변

0

cellForRowAtIndexPath 메서드에서 충분한 코드를 게시하지 않았으므로 명확하게하지 않았지만 cellForRowAtIndexPath이 호출 될 때마다 UITextField를 다시 만들 가능성이 큽니다 (많이 발생 함). 이것은 또한 당신이 미친 듯이 메모리를 누설하고 있음을 의미합니다 (그리고 앱이 앱 스토어에 등록되지 않아 부팅 할 수 없게됩니다).

이 문제를 해결하려면 xib 파일에 UITableView 셀을 만들고 UITextField를 포함 (IBOutlets를 둘 다에 연결) 한 다음 텍스트 필드를 표시 할 인덱스 경로에 cellForRowAtIndexPath이 호출되면 UITableView 셀을 반환하십시오. .

또는 UITableView 셀을 프로그래밍 방식으로 (xib에는 포함되지 않음) 만들 수 있으며, 거기에서 UITextField를 초기화하고 클래스의 변수에 할당 할 수 있습니다. 어떤 경우

, 당신은 한 번만의 UITextField init을 &을 ALLOC 할 만 번 . 그렇게 할 수 있다면 title = txt.text;으로 전화 할 수 있습니다 (UITextField의 이름을 nameLabel과 같이 좀 더 직관적으로 변경해야 함).

Take a look at this related StackOverflow question UITableViewCell에 UITextField를 포함하는 방법을 확인하십시오.

+0

알았습니다. 귀하의 제안을 이해하지만 여전히 앱이 실행되는 동안 헤더 제목을 어떻게 바꿀 수 있습니까? 내가 이름을 삽입 한 후, 헤더의 텍스트를 변경하고 싶습니다 ... – Teo

+0

'reloadData'를 호출하면 헤더를 새로 고쳐야합니다 ([이 관련된 질문은 그 사실을 나타내는 것으로 보입니다] (http://stackoverflow.com/questions/). 2805326/prevent-header-from-being-after-calling-reloaddata)) ... 이름을 입력 한 후'reloadData'를 호출하면됩니다 (텍스트 필드 델리게이트 메소드 ['textFieldDidEndEditing :'] (http://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html#//apple_ref/occ/intfm/UITextFieldDelegate/textFieldDidEndEditing :)) –