2013-09-05 4 views
0

Я работаю над приложением iOS, где у меня есть UITableView, который содержит пользовательские UITableViewCell. Каждая ячейка в таблице содержит UITextField, который получает числовой ввод. Под UITableView находится другое представление, содержащее кнопки, и одна из этих кнопок должна быть отключена до тех пор, пока все UITextFields в UITableView не будут заполнены. Когда все UITextFields заполнены, тогда и только тогда кнопка станет включенной. Как мне это сделать? У меня есть следующий код: соответствующийНужно включить UIButton только при заполнении нескольких UITextFields в iOS

- (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 в таблице содержат данные в них. Может ли кто-нибудь показать мне, как это сделать?

UPDATE:

Я добавил следующий метод в мой код:

-(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 ([subView isKindOfClass:[UITextField class]]) {...} 

Несмотря на то, что когда я поставил точку останова здесь, я вижу в переменной subViewsCache, что один из подвидных объектов действительно имеет тип UITextField. Я установил активированный атрибут кнопки в «NO» в методе viewDidLoad, но, к сожалению, он остается в этом состоянии. Кто-нибудь может понять, что я делаю неправильно?

Заранее благодарим всех, кто отвечает.

+0

Попробуйте использовать 'for' цикл, чтобы запустить через текстовые поля в ячейке для проверки 'if (textfield.text == nil)'. Если он найдет одно равное нулю, начните сначала. Если он не найдет никакого значения равным nil, тогда 'setButton.enabled = YES;'. Я только начал бы цикл 'for', как только пользователь начал редактировать textField. – CaptJak

ответ

0

Может быть этот Пыльник метод вы получили все textfiled из UITableView и установить вас логику пар вам нужно поместить Пыльник метод, чтобы 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 
        } 

       } 
      } 

     } 

    } 
+0

Большое спасибо за ваш быстрый ответ. Я просто хочу знать, каким будет мое возвращение, поскольку textFieldShouldEndEditing возвращает логическое значение? – syedfa

+0

ДА - (BOOL) textFieldShouldEndEditing: (UITextField *) textField его возврат ДА ИЛИ НЕТ –

+0

Я обновил код в своем вопросе. Взгляни, пожалуйста. – syedfa

Смежные вопросы