经历过类似的问题,tags
基本上是所有人的答案。问题是我有一个自定义UITableViewCell
,它有两个文本字段的名字和姓氏。在我的应用程序中,我有一个+
按钮,单击该按钮时会向表视图添加一个新行并重新加载表视图。现在更早,如果用户键入了某个内容,然后单击+
按钮,则会添加一个新行,但第一行中的名字和姓氏将消失。为了解决这个问题,我提了NSMutableArray
,说fNameArray
并添加了用户在- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason
中输入的内容。这很有效,但现在我必须为姓氏创建另一个NSMutableArray
问题是我不知道如何识别上述代表中的文本字段。目前,我将cellForRowAtIndexPath
中的代码设置为cell.tf_firstName.tag = indexPath.row;
答案 0 :(得分:0)
如果将相同的标记值分配给多个文本字段,则tag
属性将不起作用,并且所有文本字段使用相同的委托。
下面是一个实现,它通过为每组文本字段使用不同的委托来解决此问题。
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。