Галочка в таблице исчезает только после второго касания на устройстве - PullRequest
1 голос
/ 03 февраля 2012

Я получил флажки, появляющиеся и исчезающие правильно при прокрутке, и он отлично работает на симуляторе.

Однако на устройстве 4с тач, чтобы галочка снова исчезла, не работает должным образом. То есть мне нужно коснуться строки, которую я хочу, чтобы флажок исчезал дважды. Только после второго касания галочка исчезает.

Кроме того, все выбранные столбцы остаются с синим фоном, пока я не коснусь их снова.

Итак, вот последовательность (на устройстве):

  1. выбран сенсорный ряд, синий фон, появляется галочка
  2. Прикосновение к той же строке исчезает с синим фоном, флажок остается
  3. коснитесь в той же строке, флажок исчезает, синий фон

Что мне определенно нужно, так это то, что флажок исчезает, как только я снова касаюсь строки, собственно поведение, которое я наблюдаю на симуляторе.

Фон, я думаю, я могу управлять с помощью метода didDeselectRow. Тем не менее, я борюсь с воображением, как контролировать проблему с галочкой. Есть идеи ??

Вот код из didSelectRowAtIndexPath:

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

NSInteger thisCardID;
NSInteger thisCardIndex;
NSString *cellValue;

UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
cellValue = thisCell.textLabel.text;

if(searching) {             
    thisCardID = [[self.aCopyOfCardIDArray objectAtIndex:indexPath.row] integerValue];
    thisCardIndex = [self.aCopyOfCardIDArray indexOfObject:[NSNumber numberWithInteger:thisCardID]];
    if (thisCell.accessoryType == UITableViewCellAccessoryNone) {            
        [self.searchedSelectedRowArray replaceObjectAtIndex:thisCardIndex withObject:@"YES"];
        thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
        [self.searchedSelectedCardIDs addObject:[NSNumber numberWithUnsignedInteger :thisCardID]];
    }
    else {
        [self.searchedSelectedRowArray replaceObjectAtIndex:thisCardIndex withObject:@"NO"];
        thisCell.accessoryType = UITableViewCellAccessoryNone;
        [self.searchedSelectedCardIDs removeObject:[NSNumber numberWithUnsignedInteger:thisCardID]];
    }

} 
else {
    thisCardIndex = [self.tempCardArray indexOfObject:cellValue];

    if (thisCell.accessoryType == UITableViewCellAccessoryNone) {            
        [self.selectedRowArray replaceObjectAtIndex:thisCardIndex withObject:@"YES"];
        thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
        [self.selectedCardIDs addObject:[NSNumber numberWithUnsignedInteger :thisCardID]];
    }
    else {
        [self.selectedRowArray replaceObjectAtIndex:thisCardIndex withObject:@"NO"];
        thisCell.accessoryType = UITableViewCellAccessoryNone;
        [self.selectedCardIDs removeObject:[NSNumber numberWithUnsignedInteger:thisCardID]];
    }
}


}

Чтобы убедиться, что я проясняю себя, я добавил несколько скриншотов:

Table before selecting a row

Table after touching the row the first time

Table after touching the same row again

Table after I multi selected some rows and touched some rows again to deselect

1 Ответ

2 голосов
/ 04 февраля 2012

Рано было ложиться спать, а Эврика, это didDeselectRowAtIndexPath, который творит волшебство.Поэтому второе касание не распознается методом didSelect ...Логично, если вы это знаете :-) Теперь пришло время считать овец ...

Вот код:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
thisCell.selectionStyle = UITableViewCellSelectionStyleNone;
thisCell.accessoryType = UITableViewCellAccessoryNone;
}
...