填写所有 UITextField 时,UIButton 未启用

Posted

技术标签:

【中文标题】填写所有 UITextField 时,UIButton 未启用【英文标题】:UIButton is not enabling when all UITextFields are filled in 【发布时间】:2013-09-05 22:08:10 【问题描述】:

我正在开发一个 ios 应用程序,其中只有在填写了所有 UITextFields 之后才启用按钮(即每个字符中至少有一个字符)。每个UITextField 都位于UITableView 内部的自定义UITableViewCell 中。一旦用户在每个UITextField 中输入了一个值,我就需要启用该按钮。在我的 viewDidLoad 方法中,我禁用了按钮,如下所示:

[_doneButton setEnabled:NO];

然后我有以下方法:

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

    for (int i = 0; i < [self.table numberOfSections]; i++) 

        NSInteger rows =  [self.table numberOfRowsInSection:i];

        for (int row = 0; row < rows; row++) 

            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:i];
            SimpleTableCell *cell = (SimpleTableCell *)[self.table cellForRowAtIndexPath:indexPath];

            for (UIView *subView in cell.subviews) 

                if ([subView isKindOfClass:[UITextField class]]) 
                    //Does not come to this point
                    UITextField *txtField = (UITextField *)subView;

                    if([[txtField text] length] > 0) 

                        //Enable button and bold title
                        [_doneButton setEnabled:YES];
                        [_doneButton.titleLabel setFont:[UIFont boldSystemFontOfSize:28]];

                    

                     else 

                         [_doneButton setEnabled:NO];

                     

                

            

        

    

    return YES;

不幸的是,我的代码没有进入“if”子句,在该子句中我检查自定义单元格是否具有UITextField 类型的子视图,因此,该按钮永远不会启用。作为记录,“SimpleTableCell”是我创建的自定义UITableViewCell 类的名称。我的代码似乎是正确的,但我不知道为什么它不能正常运行。谁能看到我做错了什么?

【问题讨论】:

这可能会有所帮助:***.com/questions/13015348/… 【参考方案1】:

我想我会以完全不同的方式来解决这个问题。我会创建一个可变字典来保存各种文本字段中的字符串。给文本字段标签,并使用标签(转换为 NSNumbers)作为字典中的键。实现 textFieldDidEndEditing:,并在该方法中获取字符串,检查它是否不是空字符串,如果不是,请在字典上执行 setObject:forKey:。设置值后,检查字典的 allKeys 属性的计数,如果它等于您拥有的文本字段数,则启用该按钮。

【讨论】:

非常感谢您的及时回复。这种方法会在用户输入文本时启用按钮吗?我想要一个解决方案,如果用户是最后一个空的 UITextField,当他们输入数字时,按钮被启用,如果他们要删除这个数字,按钮将再次被禁用。 @syedfa,您必须为此使用 shouldChangeCharactersInRange:,但基本方法应该仍然有效。【参考方案2】:

这是因为单元格的唯一逻辑子视图是包含单元格所有项目的 UIView。它的属性是“contentView”。

UITableViewCell 对象的内容视图是单元格显示内容的默认超级视图。如果您想通过简单地添加其他视图来自定义单元格,则应将它们添加到内容视图中,以便在单元格进入和退出编辑模式时适当地定位它们。

更多信息在这里:https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/contentView

【讨论】:

【参考方案3】:

您是否设置了 UITextField 的委托?如果根本没有调用该方法,那就是问题所在。

【讨论】:

以上是关于填写所有 UITextField 时,UIButton 未启用的主要内容,如果未能解决你的问题,请参考以下文章

将单元格中的 UITextField 文本保存到 NSUserDefaults 中?

UItextFied 的属性

UIPicker 视图的 UITextfield 问题

子类/扩展 UIView 以便所有其他视图(UIImageView、UITextField ...)在创建时继承

UITextField 突出显示所有文本

UITextField 占位符对齐滚动问题