正在尝试查看UITableViewRowCell中的两个UITextFields是否都包含iOS中的文本

正在尝试查看UITableViewRowCell中的两个UITextFields是否都包含iOS中的文本,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个包含自定义tableView单元格的UITableView。此自定义UITableViewCell包含两个UITextField。我为每个文本字段分配了一个标记值,我想做的是确定两个UITextFields是否都包含文本。我希望这样做是因为用户在UITextFields内输入值,这样一旦用户在UITextField a中输入文本,并在UITextField B中输入字符,或者反之亦然(即用户在UITextField B中输入文本,并在UITextField B中输入单个字符),就会触发事

我有一个包含自定义tableView单元格的UITableView。此自定义UITableViewCell包含两个UITextField。我为每个文本字段分配了一个标记值,我想做的是确定两个UITextFields是否都包含文本。我希望这样做是因为用户在UITextFields内输入值,这样一旦用户在UITextField a中输入文本,并在UITextField B中输入字符,或者反之亦然(即用户在UITextField B中输入文本,并在UITextField B中输入单个字符),就会触发事件或操作。我意识到我需要使用UITextFieldDelegate方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {}

但是,我的问题是,在使用此方法时,我不确定如何引用这两个UITextFields。在使用此方法时,我似乎不知道如何获取对活动自定义UITableViewCell的引用。有人有什么建议吗?

您沿着UITextField的超级视图走,直到找到UITableViewCell。然后向tableview请求该单元格的索引。

在自定义单元格中,有两个属性textField1和textField2引用单元格中的两个文本字段。调用委托文本字段:shouldChangeCharactersRange:时,将选中使用上述两个属性:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (self.textField1.text.length > 0 && self.textField2.length > 0) {
        // do what you want
    }
}
您还可以检测与以下文本字段对应的属性:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (textField == self.textField1) {
        // text field 1's text changed
    }
    else if (textField == self.textField2) {
        // and this is text field 2
    }
}

不要使用范围内的
应更改字符
!我经常看到这一点,但这并不是这种方法的目的。该方法用于停止无效输入,例如在数字字段中输入字母


而是子类化UITableViewCell,并创建自定义单元格。给它几个iAction,让它的
UITextFields
通过
EditingChanged
事件连接到这些操作。从那里跟踪他们的价值观。如果您想查看这些值,您还可以给类几个IBOutlet

这就是我要做的:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    UITextField *theOtherTextField = nil;

    // Get a list of sibling views of the textField
    for( UIView *sub in textField.superview.subviews ){
        if( textField!=sub && [sub isKindOfClass:[UITextField class]] ){
            theOtherTextField = (UITextField *)sub;
        }
    }

    // Now you have 'textField' and 'theOtherTextField' ready to use
}
顺便说一句,这是获取单元格引用的方式,但这取决于
UITableViewCell
视图层次结构中文本字段的深度:

UITableViewCell *cell = (UITableViewCell *)textField.superview.superview;

您可能会将
UITableView
设置为
UITextFieldDelegate
。如果您希望将
UITableViewCell
更改为
UITextFieldDelegate
,则可以避免上述大部分故障

在自定义单元格中,由于您已经标记了它们,因此可以借助这些标记访问文本字段。 创建textFields的两个私有实例,然后在initWithStyle中,使用textFields标记分配它们

_textField1 = [self viewWithTag:tag1];
_textField2 = [self viewWithTag:tag2];
_textField1.delegate = self;
_textField2.delegate = self;
现在,在textField委托方法中,您可以检查两个textField的文本长度

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if(_textField1.text.length > 0 && _textField2.text.length > 0){
    // write the action you want to do here
    }
}

我没有这些文本字段的IB出口,因为它们包含在自定义UITableViewCell类中,这就是为什么我不能使用这种方法。@syedfa您可以将IB出口放在自定义UITableViewCell中。如果使用IB,可以将IB出口从IB拖到代码中,以自定义UITableViewCell类。如果不使用IB,请声明文本字段属性并分配它