如何识别除标签之外的UITextFiled

时间:2017-05-13 19:21:17

标签: ios objective-c uitableview uitextfield

经历过类似的问题,tags基本上是所有人的答案。问题是我有一个自定义UITableViewCell,它有两个文本字段的名字和姓氏。在我的应用程序中,我有一个+按钮,单击该按钮时会向表视图添加一个新行并重新加载表视图。现在更早,如果用户键入了某个内容,然后单击+按钮,则会添加一个新行,但第一行中的名字和姓氏将消失。为了解决这个问题,我提了NSMutableArray,说fNameArray并添加了用户在- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason中输入的内容。这很有效,但现在我必须为姓氏创建另一个NSMutableArray问题是我不知道如何识别上述代表中的文本字段。目前,我将cellForRowAtIndexPath中的代码设置为cell.tf_firstName.tag = indexPath.row;

1 个答案:

答案 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。