只有在iOS中填充多个UITextField时才需要启用UIButton

时间:2013-09-05 18:19:17

标签: ios uitableview uitextfield uitextfielddelegate

我正在开发一个iOS应用程序,我有一个包含自定义UITableViewCell的UITableView。表中的每个单元格都包含一个接收数字输入的UITextField。在UITableView下面是另一个包含按钮的视图,其中一个按钮需要被禁用,直到UITableView中的所有UITextField都被填充。一旦所有UITextField都已满,那么只有这样才能启用该按钮。我该怎么做呢?我有以下相关代码:

- (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中看到其中一个subView确实是UITextField类型。我在viewDidLoad方法中将按钮的enabled属性设置为“NO”,但不幸的是,它仍处于此状态。任何人都可以看到它的错误吗?

感谢所有回复的人。

1 个答案:

答案 0 :(得分:0)

可能是这个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
                    }

                }
            }

        }

    }