试图查看UITableViewRowCell内的UITextField是否包含iOS中的文本

时间:2015-10-25 01:14:07

标签: ios objective-c uitableview

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

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

然而,我的问题是我不确定如何在使用此方法时引用BOTH UITextFields。我在这个方法中似乎无法弄清楚如何获得对活动自定义UITableViewCell的引用。有没有人有任何建议?

5 个答案:

答案 0 :(得分:1)

你走上UITextField的超级视图,直到找到UITableViewCell。然后,您向tableview询问该单元格的索引。

答案 1 :(得分:1)

这就是我要做的:

- (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,则可以避免上述大部分问题。

答案 2 :(得分:0)

在自定义单元格中,您有两个属性textField1和textField2引用单元格中的两个文本字段。当委托textField:shouldChangeCharactersInRange:invoked时,你将检查使用上面两个属性:

- (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
    }
}

答案 3 :(得分:0)

不要使用shouldChangeCharactersInRange!我经常看到它并不是那种方法。该方法用于停止无效输入,例如在数字字段中输入字母。

而是继承UITableViewCell并创建自定义单元格。给它几个IBActions并让UITextFields连接到EditingChanged事件的那些操作。从那里跟踪它们中的值。如果你想看看这些值,你也可以给这个班级一些IBOutlets。

答案 4 :(得分:0)

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

_textField1 = [self viewWithTag:tag1];
_textField2 = [self viewWithTag:tag2];
_textField1.delegate = self;
_textField2.delegate = self;

现在在textField Delegate方法中,您可以检查两个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
    }
}