Как снять галочку с другого клика? - PullRequest
5 голосов
/ 05 декабря 2011

Я хочу создать таблицу, которую пользователь может выбрать и отменить выбор с галочкой:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath 
{
    ...;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

- (void)tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    ...;
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;
    ...;
}

Я пытался снять галочку при повторном нажатии на отмеченную галочкой ячейку, но для этого требуется 2 клика вместо одного.

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

Я также попробовал некоторые условные выражения в didSelectRowAtIndexPath, но они также реагируют только на второй щелчок.

В чем причина проблемы и как ее исправить?

Ответы [ 4 ]

15 голосов
/ 06 декабря 2011

Вы можете попробовать это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  NSUInteger index = [[tableView indexPathsForVisibleRows] indexOfObject:indexPath];

  if (index != NSNotFound) {
    UITableViewCell *cell = [[tableView visibleCells] objectAtIndex:index];
    if ([cell accessoryType] == UITableViewCellAccessoryNone) {
      [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
    } else {
      [cell setAccessoryType:UITableViewCellAccessoryNone];
    }
  }
}

Это должно переключать флажок ячейки при каждом касании.Если вы хотите, чтобы одновременно отображалась только одна ячейка, добавьте следующее:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger index = [[tableView indexPathsForVisibleRows] indexOfObject:indexPath];
    if (index != NSNotFound) {
        UITableViewCell *cell = [[tableView visibleCells] objectAtIndex:index];
        [cell setAccessoryType:UITableViewCellAccessoryNone];
    }
}

Если вы не хотите использовать синий фон с подсветкой, просто установите стиль выделения ячейки на UITableViewCellSelectionStyleNone один раз.Вы создаете ячейку.

1 голос
/ 18 ноября 2016

На основе ссылки Starter на Apple Docs (мой код в Swift 3):

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    if let cell = tableView.cellForRow(at: selectedIndexPath) {
        cell.accessoryType = .none
    }
    if let cell = tableView.cellForRow(at: indexPath) {
        cell.accessoryType = .checkmark
    }
    selectedIndexPath = indexPath
}

Главное - отслеживать текущую выбранную ячейку и соответствующим образом изменять cell.accessoryType.Также не забудьте правильно установить cell.accessoryType в tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) на основе selectedIndexPath.

0 голосов
/ 16 августа 2012
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
       if (index != NSNotFound) {
              UITableViewCell *cell = [[tableView visibleCells] objectAtIndex:index];
              if (cell.accessoryType == UITableViewCellAccessoryNone)
                 cell.accessoryType = UITableViewCellAccessoryCheckmark;
             else
                 cell.accessoryType = UITableViewCellAccessoryNone;
             [self.tableName reloadData];
        }
}

Это помогает при переключении галочек (уберите галочку при повторном нажатии на ячейку с галочкой)

0 голосов
/ 21 июня 2012

Проверьте это Официальный документ Apple

лучшее решение когда-либо

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