一千萬個為什麽

搜索

如何刪除另一次點擊的復選標記?

我想創建一個用戶可以選中的表,並使用復選標記取消選擇:

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

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

當我再次點擊勾選標記的單元格時,我試圖刪除復選標記,但只需要點擊2次而不是一次。

如果我將選擇樣式設置為默認值,當我單擊選定的行時,它會刪除藍色突出顯示;再次單擊,它會刪除復選標記。

我還在 didSelectRowAtIndexPath 中嘗試了一些條件語句,但它們也僅響應第二次單擊。

導致問題的原因是什麽?如何解決?

最佳答案

你可以嘗試這個:

- (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];
    }
}

如果您不想要藍色hilight背景,只需在創建單元格後將單元格的選擇樣式設置為 UITableViewCellSelectionStyleNone

轉載註明原文: 如何刪除另一次點擊的復選標記?