UITableView在单元格选择之间禁用突出显示

时间:2012-06-15 19:16:21

标签: ios uitableview

在启用选择的情况下使用UITableView时,我可以选择一行,并通过突出显示选中它。但是,当我选择第二行时,默认情况下会发生这种情况:

  1. 第1行已被选中并可见。
  2. 我在第2排上按下手指。
  3. 当我的手指仍被按下时,第1行和第2行都会明显突出显示。
  4. 释放我的手指现在选择第2行,只有它明显突出显示。
  5. 我要做的是在上面的步骤3中这样做,两个单元格不会同时突出显示。有可能这样做吗?

4 个答案:

答案 0 :(得分:1)

在此使用此委托,您可以取消选择单元格。

  • (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath;

答案 1 :(得分:0)

这有效

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath{
[self.tableView.delegate tableView:tableView didSelectRowAtIndexPath:indexPath];
return NO;

}

答案 2 :(得分:0)

请按照以下步骤操作

  • 在故事板中选择表格视图
  • 请改为选择“单一选择” “选择”类型中的“多选”(在属性检查器中)

希望这可以帮到你

答案 3 :(得分:-1)

好的,我根据讨论编辑了这个答案。

假设您是UITableViewCell的子类,请在实现中使用此代码:

(例如,CustomTableCell.m)

#define MyTableCellHighlightedNotification @"MyTableCellHighlighted" 

- (id)initWithStyle:(UITableViewCellStyle)style 
    reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if(self){
        // Your custom initialization here

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(tableCellHighlighted:)
                                                     name:MyTableCellHighlightedNotification
                                                   object:nil];

    }
}

- (void) dealloc
{
    [[NSNotifcationCenter defaultCenter] removeObserver:self];

    // ...Release ivars...

    [super dealloc]
}

- (void) setHighlighted:(BOOL) highlighted
{
    // Default behaviour (defer to super)
    [super setHighlighted:highlighted];

    if(highlighted == YES){
        // De-highlight all other cells
        [[NSNotificationCenter defaultCenter] postNotificationName:MyTableCellHighlightedNotification
                                                            object:self]

    }
}

- (void)tableCellHighlighted:(NSNotification*) notification
{
    // All cells receive this notification

    if([notifcation object] != self){
        // All cells except the notification sender de-highlight themselves
        [self setHighlighted:NO];
    }
}