0

カスタム UITableViewCell を含む UITableView がある iOS アプリケーションで作業しています。テーブルの各セルには、数値入力を受け取る UITextField が含まれています。UITableView の下には、ボタンを含む別のビューがあり、UITableView のすべての UITextFields が入力されるまで、これらのボタンの 1 つを無効にする必要があります。すべての 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 {

}

ただし、テーブル内のすべての UITextFields にデータがある場合にのみ、特定のボタンを有効にする方法がわかりません。これどうやってするの?

アップデート

コードに次のメソッドを追加しました。

-(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 で、サブビューの 1 つが実際に UITextField 型であることがわかります。viewDidLoadメソッドでボタンのenabled属性を「NO」に設定したのですが、残念ながらこの状態のままです。私は何を間違っていますか?

4

1 に答える 1