iPhone - NSMutableArray - UITableViewCell - PullRequest
0 голосов
/ 23 ноября 2011

Hello Folks

У меня есть табличное представление, которое я загружаю из вывода JSON.Я реализовал функцию проверки и снятия отметки с ячеек UITableView.

Problem1 - Когда я прокручиваю до нижней части представления, все выделенные ячейки сверху становятся невыбранными.Я не знаю, почему это происходит, если кто-то может направить меня с этим:)

Problem2 - я хочу взять все выбранные ячейки в виде таблицы и поместить их вNSMutableArray.Я знаю, что есть много способов сделать это, но не могли бы вы, ребята, сказать мне более эффективный способ.Я потратил почти 2 дня, чтобы понять это, но все равно не повезло!

Спасибо и наилучшими пожеланиями

1 Ответ

2 голосов
/ 23 ноября 2011

Ну, это случайно, потому что вы, вероятно, еще не до конца поняли, как работает UITableView.

Он использует ячейки, поэтому вы вызываете метод dequeTableCellWithIdentifier: для UITableView. Это означает, что он будет использовать одну из ячеек, которые больше не отображаются.

Не добавляйте UITableViewCell для каждого элемента в UITableViewDataSource, это может / будет использовать слишком много памяти, а ваш UITabelView будет чувствовать себя очень медленно.

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

Что вам нужно сделать, это установить выбранное состояние ячейки в элементе UITableViewDataSource и найти выбранное значение, указанное в UITableViewDataSource, а не UITableViewCell.

Таким образом, в объект, который вы извлекаете из JSON, добавьте выбранное свойство, которое принимает BOOL.

Затем в UITableViewDataSoutrce методе cellForRowAtIndexPath сделать что-то вроде:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier = @"SomeCellIdentiefier";

    UITableViewCell *cell = (SongTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell) {
        //Load new cell
    }

    YouJSONObject *item = [self.array objectAtIndex:indexPath.row];

    if (item.selecte) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

}

Тогда ваши UITableViewDelegate методы didSelectRowAtIndexPath делают что-то вроде:

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
YouJSONObject *item = [self.array objectAtIndex:indexPath.row]; 

    item.selected = !item.selected;
    if (item.selecte) {
       cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
       cell.accessoryType = UITableViewCellAccessoryNone;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...