2013-09-05 1 views
0

Я работаю над приложением iOS, где кнопка включена только после заполнения всех UITextField s (то есть имеют по крайней мере один символ внутри каждого). Каждый UITextField находится в обычном UITableViewCell внутри UITableView. Как только пользователь ввел значение в каждом UITextField, мне нужно, чтобы кнопка была включена. К сожалению, я сейчас борюсь с этой проблемой. Внутри моего viewDidLoad метода, отключить кнопку следующим образом:UIButton не включается, когда все поля UITextField заполняются в

[_doneButton setEnabled:NO]; 

, а затем у меня есть следующий метод:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

    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]]) { 
        //Does not come to 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]]; 

        } 

        else { 

         [_doneButton setEnabled:NO]; 

        } 

       } 

      } 

     } 

    } 

    return YES; 
} 

К сожалению, мой код не попасть в «если» пункта где я проверяю чтобы убедиться, что пользовательская ячейка имеет subView типа UITextField, и из-за этого кнопка никогда не включается. Для записи «SimpleTableCell» - это имя моего настраиваемого класса UITableViewCell, который я создал. Мой код кажется правильным, но я не могу понять, почему он работает неправильно. Кто-нибудь может понять, что я делаю неправильно?

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

+1

thi может быть поможет: http: //stackoverflow.com/questions/13015348/table-cell-subview-iteration-not-finding-textfield –

ответ

2

Я думаю, я бы об этом совершенно по-другому. Я бы создал изменяемый словарь для хранения строк в различных текстовых полях. Дайте теги текстовых полей и используйте теги (преобразованные в NSNumbers) в качестве ключей в словаре. Внесите textFieldDidEndEditing :, и в этом методе получите строку, убедитесь, что это не пустая строка, а если нет, установите setObject: forKey: в словаре. После того, как вы установите значение, проверьте количество свойств allKeys словаря, и если оно равно количеству текстовых полей, включите эту кнопку.

+0

Большое спасибо за ваш быстрый ответ. Будет ли этот подход включать кнопку, пока пользователь вводит текст? Я хочу, чтобы такое решение, что если пользователь является последним пустым UITextField, то, как только они вводят число, кнопка включена, и если они должны были удалить этот номер, кнопка снова будет отключена. – syedfa

+1

@syedfa, вам нужно использовать shouldChangeCharactersInRange: для этого, но базовый подход должен по-прежнему работать. – rdelmar

0

Вы установили делегат UITextField? Если этот метод вообще не вызван, это проблема.

2

Это потому, что единственным логическим подзором ячейки является UIView, содержащий все элементы ячейки. Это свойство «contentView».

Представление контента объекта UITableViewCell является стандартным надзором для содержимого, отображаемого ячейкой. Если вы хотите настроить ячейки, просто добавив дополнительные виды, вы должны добавить их в представление контента, чтобы они были соответствующим образом размещены, когда ячейка переходит в режим редактирования и выходит из него.

Более подробная информация об этом здесь: https://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/contentView