试图查看 UITableViewRowCell 内的两个 UITextFields 是不是包含 iOS 中的文本

Posted

技术标签:

【中文标题】试图查看 UITableViewRowCell 内的两个 UITextFields 是不是包含 iOS 中的文本【英文标题】:Trying to see if both UITextFields inside of UITableViewRowCell contain text in iOS试图查看 UITableViewRowCell 内的两个 UITextFields 是否包含 iOS 中的文本 【发布时间】:2015-10-25 01:14:07 【问题描述】:

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

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

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

【问题讨论】:

【参考方案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】:

你沿着 UITextField 的 superviews 走,直到你找到一个 UITableViewCell。然后向 tableview 询问该单元格的索引。

【讨论】:

【参考方案3】:

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

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

【讨论】:

我没有这些文本字段的 IB 出口,因为它们包含在自定义 UITableViewCell 类中,这就是我不能使用这种方法的原因。 @syedfa 您将 IBOutlets 放入自定义 UITableViewCell。 如果您使用 IB,您可以将 IB Outlet 从 IB 拖到您的代码中自定义 UITableViewCell 类。如果不使用 IB,则声明文本字段属性并分配它【参考方案4】:

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

改为子类UITableViewCell 并制作您的自定义单元格。给它几个 IBActions 并让它的 UITextFields 通过 EditingChanged 事件连接到这些操作。从那里跟踪其中的值。如果您想查看这些值,您还可以为班级提供几个 IBOutlets。

【讨论】:

【参考方案5】:

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

_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
    

【讨论】:

以上是关于试图查看 UITableViewRowCell 内的两个 UITextFields 是不是包含 iOS 中的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在报表查看器中添加参数?

windows server 2003 iis配置 出现 http 403 禁止访问,怎么办,网页内显示“你无权查看该网页”

特定时间范围内的重叠计数

正试图在 os 加载程序锁内执行托管代码

试图了解 ScrollView 内 LinearLayout 的边距

试图在Swift的信标区域内合并声音