如何在自定义UITableView中获取textFields

Ale*_*lex 2 objective-c uitableview uitextfield ios

非常初学的对象问题.

我有简单的UITableView有两个部分,但我现在只对第一部分感兴趣.此部分有四个自定义单元格(继承自标准UITableViewCell),它们具有UITextField作为属性.

我需要改进自定义输入附件视图,按钮"Next","Previous"(用于在tableview中的textFields之间切换)和"Done"(解除键盘).http://uaimage.com/image/62f08045

In -textFieldShouldReturn我为textFields设置了从0到3的标签.我的下一个计划是将textFields添加到-viewDidLoad中的NSMutableArray中,然后设置并重新设置textFields的第一个响应者."下一步"按钮的近似代码列表:

- (void) inputAccessoryViewDidSelectNext:(FDInputAccessoryView *)view {
    for (UITextField *textField in [self textFieldsArray]) {

        if ([textField isFirstResponder]) {

            [textField resignFirstResponder];
     UITextField *field = [[self textFieldsArray] objectAtIndex:textField.tag + 1];
            [field becomeFirstResponder];
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

问题:

  • 这是正确的方法还是有更好的方法来解决问题?
  • 我是否需要标记文本字段或使用单元格的indexPath来构建它们?(或者跟踪textFields最好的是什么?)
  • 主要问题是:从单元格"获取"textField的语法是什么?

抱歉愚蠢的问题,我是一个非常初学者.

谢谢,亚历克斯.

joh*_*ham 5

我认为你有正确的想法,但有些事情会浮现在脑海中:

  • 为了安全起见,请不要以标签号0开头.每个视图的标签号都默认为0,因此您可能会遇到意外情况.
  • 不要设置内部的文本视图的标签textFieldShouldReturn,在设置的标签cellForRowAtIndexPath或者viewDidLoad,无论你初始化了文本框.
  • 将textFields添加到单元格的contentView,而不是单元格本身.
  • 您不必从第一个文本字段中退出第一个响应者,您可以只becomeFirstResponder在新文本字段上.
  • 确保您正在处理最后一个文本视图边缘情况:您可以循环到第一个文本字段或者只是在最后解除键盘.

如果要在单元格中获取textField:

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:
                         [NSIndexPath indexPathForRow:ROW_NUMBER inSection:1]];
UITextField *textField = (UITextField *)[cell.contentView viewWithTag:TEXT_FIELD_TAG];
Run Code Online (Sandbox Code Playgroud)