只有在iOS中填写了多个UITextFields时才需要启用一个UIButton
Posted
技术标签:
【中文标题】只有在iOS中填写了多个UITextFields时才需要启用一个UIButton【英文标题】:Need to enable a UIButton only when multiple UITextFields are filled in iOS 【发布时间】:2013-09-05 18:19:17 【问题描述】:我正在开发一个 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 方法中将按钮的 enabled 属性设置为“NO”,但不幸的是,它仍然处于这种状态。我做错了什么?
【问题讨论】:
尝试使用for
循环遍历单元格中的文本字段以检查if (textfield.text == nil)
。如果它找到一个等于 nil,重新开始。如果它没有找到任何等于 nil,那么 setButton.enabled = YES;
。一旦用户开始编辑文本字段,我只会启动for
循环。
【参考方案1】:
可能是这个 Bellow 方法,您获得了 UITableview 的所有文本文件,并将您的逻辑设置为您需要将 Bellow 方法放入 textFieldShouldEndEditing
希望这对您有帮助
for (int i = 0; i < [self.tableView numberOfSections]; i++)
NSInteger rows = [self.tableView numberOfRowsInSection:i];
for (int row = 0; row < rows; row++)
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:i];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
for (UIView *subView in cell.subviews)
if ([subView isKindOfClass:[UITextField class]])
UITextField *txtField = (UITextField *)subView;
if(txtField.text.length>0)
//found value in textfiled
else
//Emplty textfiled
【讨论】:
非常感谢您的及时回复。我只想知道我的回报是什么,因为 textFieldShouldEndEditing 返回一个布尔值? YES - (BOOL)textFieldShouldEndEditing:(UITextField *)textField 它的返回是或否以上是关于只有在iOS中填写了多个UITextFields时才需要启用一个UIButton的主要内容,如果未能解决你的问题,请参考以下文章
具有多个 UITextFields 的 iOS UITableViewCell 子类滚动出视图