Проблема с контрольным списком UITableView - PullRequest
0 голосов
/ 13 июля 2010

У меня странная проблема. Я делаю программу контрольного списка с XCode, и я использую UITableView с UITableViewCellAccessoryCheckmark. Я могу выбрать ячейки, и появится галочка, но каким-то образом другие ячейки, которые я НЕ выбрал ниже, также будут иметь галочку. Есть идеи?
Вот моя кодировка галочки:

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell;
cell = [aTableView cellForRowAtIndexPath: indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark; 

}

Я не знаю, влияет ли это на это, но я также реализовал этот метод:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"CellIdentifier";

// Dequeue or create a cell of the appropriate type.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.accessoryType = UITableViewCellAccessoryNone;
}

// Configure the cell.
if(tableView == Table1){

    switch(indexPath.section){
        case 0:
            cell.textLabel.text = [array1 objectAtIndex:indexPath.row];
            break;
        case 1:
            cell.textLabel.text = [array2 objectAtIndex:indexPath.row];
            break;
        case 2:
            cell.textLabel.text = [array3 objectAtIndex:indexPath.row];
            break;
    }

    //cell.textLabel.text = [NSString stringWithFormat:@"Row %d", indexPath.row];
}
if(tableView == Table2){
    cell.textLabel.text = [array4 objectAtIndex:indexPath.row];
}
return cell;

}

Спасибо.

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Вы должны хранить проверенную / непроверенную информацию в источнике данных (массиве).

Я также советую вам удалить строку cell.accessoryType = UITableViewCellAccessoryNone;.Эта строка будет выполнена только для нескольких первых ячеек.Все остальные ячейки будут «повторно использованы» - это означает, что будут использоваться старые (уже инициированные) ячейки, и вам придется изменить детали, отображаемые в этих ячейках (все внутри cellForRowAtIndexPath, как вы делаете сейчас).

Кроме того, вам придется добавить аналогичную строку (что-то вроде cell.accessoryType = ([[array objectAtIndex:indexPath.row] boolValue] ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;).

В общем, я предлагаю вам использовать один массив для хранения данных для вашей таблицы, когда каждый элементв массиве будет словарь.Таким образом, вы сможете хранить тексты и логические галочки (внутри NSNumber) и легко получать к ним доступ при необходимости.

2 голосов
/ 14 июля 2010

Установите cell.accessoryType каждый раз, когда вы звоните tableView:cellForRowAtIndexPath:.В противном случае при повторном использовании ячейки вы получите ее accessoryView вместо ожидаемого.

Так что, да, вам нужно будет отслеживать, когда NSIndexPath выбираются каким-либо иным способом, чем простоглядя на accessoryType.

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