Получение ячеек в UITableView - PullRequest
       11

Получение ячеек в UITableView

1 голос
/ 01 октября 2009

У меня есть UITableView, который при нажатии на ячейку отправляет tableViewB, который содержит пользовательские ячейки. Эти ячейки содержат текстовые поля. Как только пользователь выполняет какое-либо обновление, он нажимает «Сохранить», после чего появляется таблица tableViewB и переходит к первому UITableView. Я хотел бы получить все значения UITextField из tableViewB при нажатии кнопки Сохранить. Каков наилучший способ сделать это?

Проблема в том, что мне нужно перебрать все ячейки UITableView. Я не уверен, как это сделать или если это даже хороший подход. Просто ищу помощи в том, что такое хорошая техника здесь.

Ответы [ 3 ]

3 голосов
/ 01 октября 2009

Вы должны знать, что, как правило, выделено только столько ячеек, сколько отображается на экране. Ячейки, которые не видны, на самом деле не являются постоянными, а создаются только при вызове tableView:cellForRowAtIndexPath:. Я предлагаю вам создать массив для кэширования содержимого всех текстовых полей, который обновляется всякий раз, когда пользователь покидает текстовое поле (например, вызывается textField: shouldEndEditing: метод или что-то подобное).

3 голосов
/ 02 октября 2009

в вашем заголовке tableViewB, объявите:

NSMutableArray *stringArray;

и в реализации:

- (id) init {  //whatever your tableViewB initializer looks like
    if ([self = [super init]) {
        //oldData is an NSArray containing the initial values for each text field in order
        stringArray = [[NSMutableArray alloc] initWithArray:oldData];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    //Making the cell
    [cell.textfield addTarget:self action:@selector(updateField:) forControlEvents:UIControlEventValueChanged];
    ....

    //Setting up the cell
    cell.textfield.tag = indexPath.row;
    cell.textfield.text = [stringArray objectAtIndex:indexPath.row];
    return cell;
}

- (void) updateField:(UITextField *)source {
    NSString *text = source.text;
    [stringArray replaceObjectAtIndex:source.tag withObject:text];
}

- (void) dealloc {
    [stringArray release];
}

Существует несколько способов вернуть данные в исходное табличное представление либо делегатом, либо объявив stringArray как переменную, переданную инициализатору tableViewB, а не размещенную там.

1 голос
/ 01 октября 2009

Если я понимаю твой вопрос - идентифицируй каждую ячейку численно и ссылайся на них в массиве / карабкайся по массиву, чтобы пройти через них

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...