只有在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的主要内容,如果未能解决你的问题,请参考以下文章

如果所有文本字段都填写在 ios 中,则启用按钮

具有多个 UITextFields 的 iOS UITableViewCell 子类滚动出视图

没有按钮操作的多个 UITextfields 的总和

一些 UITextfields 在 iOS6 中没有响应

UIScrollview 已实现,但 UITextfields 仍被键盘覆盖

UIpickerView 在同一个 ScrollView 中填充多个 uitextFields