我正在开发一个 iOS 应用程序,其中有一个包含自定义 UITableViewCell 的 UITableView。表中的每个单元格都包含一个接收数字输入的 UITextField。UITableView 下方是另一个包含按钮的视图,需要禁用其中一个按钮,直到 UITableView 中的所有 UITextField 都已填充。一旦所有的 UITextFields 都已满,那么只有这样按钮才会启用。我该怎么做呢?我有以下相关代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
static NSString *cellIdentifier = @"Cell";
_cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (_cell == nil) {
_cell = [[SimpleTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
_cell.dataField.tag = indexPath.row;
_cell.dataField.delegate = self;
_cell.dataField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
[_cell.dataField setTextAlignment:NSTextAlignmentRight];
[_cell setSelectionStyle:UITableViewCellSelectionStyleNone];
return _cell;
}
我正在实施UITextFieldDelegate
,我认为我的解决方案必须使用以下方法:
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
}
但是,我不确定如何仅当表中的所有 UITextField 中都有数据时才启用特定按钮。我怎样才能做到这一点?
更新
我在我的代码中添加了以下方法:
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField {
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]]) {
//NEVER REACHES 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]];
}
}
}
}
}
return YES;
}
在调用此方法时,问题是它从未到达 if 语句内部:
if ([subView isKindOfClass:[UITextField class]]) {...}
即使我在这里放置断点,我在变量 subViewsCache 中看到其中一个子视图确实是 UITextField 类型。我在 viewDidLoad 方法中将按钮的启用属性设置为“NO”,但不幸的是,它仍然处于这种状态。我究竟做错了什么?