2011-09-02 8 views
0

UITableViewCells에 텍스트 필드가 포함 된 Grouped TableView가 있습니다. 내가 저장 버튼을 누르면UITableViewCell의 UITextView - 태그 문제

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

} 


if(indexPath.section < 6) { 
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10,580, 31)]; 
    textField.tag = indexPath.section + 22; 
    textField.delegate = self; 
    [cell.contentView addSubview:textField]; 
    [textField release]; 
} 
return cell; 
} 

은 그래서, saveItem 방법은 호출됩니다

- (void)saveItem { 
    NSMutableArray *textFieldArray = [[NSMutableArray alloc] init]; 
    for (int i = 0; i <6; i++) { 
     [textFieldArray addObject:(UITextField *)[self.view viewWithTag:22+i]]; 
    } 
... 
} 

나는 문제없이 처음 4 TextField의 값을 변경할 수 있습니다. 그들은 또한 저장됩니다,하지만 난 5 또는 6 텍스트 필드의 값을 변경할 때, 내 응용 프로그램 충돌을 그리고 난 오류 얻을 :

응용 프로그램을 종료

* 인해 캐치되지 않는 예외 'NSInvalidArgumentException', 이유에 '*을 - [ NSMutableArray insertObject : atIndex :] : 0에서 nil 객체 삽입 시도

제안 사항이 있습니까?

감사합니다. 당신이 저장 버튼을 누를 때 모든 섹션이 표시되지 :

+0

여섯 개의 섹션이 모두 표시됩니까? – Nekto

+0

예, 올바른 값으로 채워집니다. – jussi

+0

새 셀을 만들 때 텍스트 필드를 추가해야합니다. 이미 셀이있는 셀에 텍스트 필드를 추가하는 순간입니다. – jrturton

답변

0

나는 문제가 있다는 점에서 생각합니다. 따라서 태그 5와 6을 사용하여 view에 액세스하려고 시도하면 태그가 표시되지 않고보기에 추가되지 않았기 때문에 (또는 제거되지 않았기 때문에) 0이됩니다.

테스트하려면 tableView 아래로 스크롤하여 저장 버튼을 누르십시오.

+0

좋아, 키보드를 닫고 모든 셀을 볼 때 작동합니다. 그렇다면 키보드를 숨겨서 어떻게 접근 할 수 있습니까? – jussi

+0

'UITableViewController'의 일부 변수에'textField' 값을 저장해야합니다. 그렇지 않으면 값을 잃게됩니다. – Nekto

+0

이제'textFieldDidEndEditing'에서 완벽하게 작동합니다. 감사! – jussi

0

1. 언제든지 그 객체에 액세스하려는 사용자는 사용할 수 없습니다. 이는 [self.view viewWithTag : 22 + i]가 nil을 제공한다는 것을 의미합니다.

2.tableview는 모든 cells.it에 메모리를 할당하면 표시 할 수있는 메모리 만 할당합니다.

3.once tableview를 스크롤하고 여섯 번째 섹션을 본 다음 저장 버튼을 누르면 앱이 다운되지 않습니다.

0

은 그냥 cellForRowAtIndexPath에서 텍스트 필드를 만들 수 없습니다, 또한 코드

if(indexPath.section <= 6) {  
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10,580, 31)];  
    textField.tag = indexPath.section + 22;  
    textField.delegate = self;  
    [cell.contentView addSubview:textField];  
    [textField release]; 
} 
+0

동일하지 않습니까? – jussi

0

을 수정 타이가 필요합니다. init 또는 viewDidLoad 방법으로 생성해야합니다.