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