我正在使用一个iOS应用程序,其中仅在填写了所有UITextField
之后(即每个字符内至少有一个字符)才启用按钮。每个UITextField
位于UITableViewCell
内部的自定义UITableView
中。用户在每个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
的subView,因此,该按钮从未启用。作为记录,“ SimpleTableCell”是我创建的自定义UITableViewCell
类的名称。我的代码似乎是正确的,但是我不知道为什么它无法正常运行。谁能看到我在做什么错?
我想我将以完全不同的方式进行此操作。我将创建一个可变字典,以将字符串保存在各个文本字段中。给文本字段添加标签,并使用标签(转换为NSNumbers)作为字典中的键。实现textFieldDidEndEditing:,然后在该方法中获取字符串,检查它是否不是空字符串,如果不是,请在字典上执行setObject:forKey:。设置该值后,检查字典的allKeys属性的计数,如果它等于您拥有的文本字段数,请启用该按钮。
这是因为单元格的唯一逻辑子视图是包含该单元格所有项目的UIView。它的属性是“ contentView”。
UITableViewCell对象的内容视图是单元格显示的内容的默认超级视图。如果要通过简单地添加其他视图来自定义单元格,则应将其添加到内容视图中,以便在单元格进入和退出编辑模式时它们的位置适当。
您是否设置了UITextField的委托?如果根本没有调用该方法,那就是问题所在。