2017-05-13 4 views
0

비슷한 질문을 던졌을 때 tags은 기본적으로 모두에게 답을줍니다. 문제는 두 번째 텍스트 필드에 이름과 성이있는 사용자 정의 UITableViewCell입니다. 내 응용 프로그램에서 나는 + 버튼을 클릭하면 테이블 뷰에 새 행을 추가하고 테이블 뷰가 다시로드됩니다. 이전에 사용자가 무언가를 입력 한 다음 + 버튼을 클릭하면 새 행이 추가되지만 첫 번째 행의 이름과 성이 사라집니다. 이 문제를 해결하려면 라고 말하고 fNameArray라고 입력하고 사용자가 입력하는 내용을 - (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason에 입력하면됩니다. 이제는 제대로 작동하지만 이제는 NSMutableArray 성을 작성해야합니다. 문제는 어떻게 텍스트 필드를 식별 할 수 있을까요? 위의 위임자. 현재 cellForRowAtIndexPath에 태그를 설정하고 있습니다. cell.tf_firstName.tag = indexPath.row; 태그로부터 UITextFiled를 어떻게 식별합니까?

답변

0

동일한 태그 값이 둘 이상의 텍스트 필드에 할당되고 동일한 텍스트가 모든 텍스트 필드에 사용되는 경우이 속성은 작동하지 않습니다.

다음은 각 텍스트 필드 집합에 다른 대리자를 사용하여이 문제를 해결하는 구현입니다.

TextFieldArrayManager은 텍스트 필드와 해당 데이터의 배열을 관리합니다. 관리하는 텍스트 필드의 위임자 역할을합니다.

@interface TextFieldArrayManager : NSObject <UITextFieldDelegate> 
@property NSMutableArray *textItems; 
@end 

@implementation TextFieldArrayManager 
- (void)textFieldDidEndEditing:(UITextField *)textField { 
    if (_textItems.count >= textField.tag + 1) { 
     if (textField.text) { 
      _textItems[textField.tag] = textField.text; 
     } 
     else { 
      _textItems[textField.tag] = @""; 
     } 
    } 
} 
@end 

보기 컨트롤러는 첫 번째 및 마지막 이름을 관리하기 위해 별도의 TextFieldArrayManager을 사용합니다.

@interface ObjcTableViewController() 
@end 

@implementation ObjcTableViewController 

TextFieldArrayManager *firstNames; 
TextFieldArrayManager *lastNames; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    firstNames = [[TextFieldArrayManager alloc] init]; 
    firstNames.textItems = [NSMutableArray arrayWithObjects:@"George", @"Ludwig", @"Wolfgang", nil]; 

    lastNames = [[TextFieldArrayManager alloc] init]; 
    lastNames.textItems = [NSMutableArray arrayWithObjects:@"Handel", @"Beethoven", @"Mozart", nil]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return firstNames.textItems.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ObjcTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    cell.firstName.delegate = firstNames; 
    cell.firstName.text = firstNames.textItems[indexPath.row]; 
    cell.firstName.tag = indexPath.row; 

    cell.lastName.delegate = lastNames; 
    cell.lastName.text = lastNames.textItems[indexPath.row]; 
    cell.lastName.tag = indexPath.row; 

    return cell; 
} 

테이블에 비어있는 새 행을 추가하려면이 작업을 수행 할 수 있습니다
[firstNames.textItems addObject:@""]; 
[lastNames.textItems addObject:@""]; 
[self.tableView reloadData]; 

사용자가 텍스트를 입력

, 그것은 textItems에 저장됩니다.