Как правильно переключать accesoryType UITableViewCell при выборе / отмене выбора ячеек? - PullRequest
4 голосов
/ 15 января 2012

Я пытаюсь переключить accesoryType , когда ячейка таблицы выбрана / отменена ... поведение должно быть: нажмите -> установите accessoryType на UITableViewCellAccessoryCheckmark -> нажмите на ячейкуснова -> возврат к типу UITableViewCellAccessoryNone .Реализация в моем контроллере следующая:

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

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell setAccessoryType:UITableViewCellAccessoryNone];
}

... в любом случае, когда стиль настроен как UITableViewCellAccessoryCheckmark Я не могу восстановить его обратно в UITableViewCellAccessoryNone !Я также пытался позвонить:

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];

, но не снимает галочку ... что мне делать?

РЕДАКТИРОВАТЬ: реализация в порядке, проблема была впользовательский подкласс UITableViewCell ... извините: P

Ответы [ 4 ]

13 голосов
/ 16 января 2012

Попробуйте, если это то, что вы хотите

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    {   
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
        {
            cell.accessoryType = UITableViewCellAccessoryNone;
        }
        else
        {
            cell.accessoryType = UITableViewCellAccessoryCheckmark;
        }
    }
2 голосов
/ 11 марта 2014

Если вы хотите, чтобы в качестве галочки была только одна строка, используйте

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = (cell.accessoryType == UITableViewCellAccessoryCheckmark) ? UITableViewCellAccessoryNone : UITableViewCellAccessoryCheckmark;
    if (_lastSelectedIndexPath != nil)
    {
        UITableViewCell *lastSelectedCell = [tableView cellForRowAtIndexPath:_lastSelectedIndexPath];
        lastSelectedCell.accessoryType = UITableViewCellAccessoryNone;
    }
    _lastSelectedIndexPath = indexPath;
} 
0 голосов
/ 27 июля 2016
- (void)tableView:(UITableView *)theTableView didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath {
    [theTableView deselectRowAtIndexPath:[theTableView indexPathForSelectedRow] animated:NO];
    UITableViewCell *cell = [theTableView cellForRowAtIndexPath:newIndexPath];
    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        // Reflect selection in data model
    } else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
        cell.accessoryType = UITableViewCellAccessoryNone;
        // Reflect deselection in data model
    }
}
0 голосов
/ 15 января 2012

Повторное нажатие на ячейку соответствует выбору ячейки, а не отмене выбора.

Вам необходимо переключить метод - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath, чтобы проверить, является ли cell.accessoryType == UITableViewCellAccessoryCheckmark.

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