Я работаю над приложением 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, но, к сожалению, он остается в этом состоянии. Кто-нибудь может понять, что я делаю неправильно?
Заранее благодарим всех, кто отвечает.
Попробуйте использовать 'for' цикл, чтобы запустить через текстовые поля в ячейке для проверки 'if (textfield.text == nil)'. Если он найдет одно равное нулю, начните сначала. Если он не найдет никакого значения равным nil, тогда 'setButton.enabled = YES;'. Я только начал бы цикл 'for', как только пользователь начал редактировать textField. – CaptJak