我显示在一个组表视图内容解析从XML。我想禁用它上的单击事件(我应该不能单击它)表包含两个组。我只想禁用第一组的选择,而不是第二组。点击第二组的第一行导航到我的管播放器视图。

如何使特定的组或行可选?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if(indexPath.section!=0)
    if(indexPath.row==0)    

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:tubeUrl]];   
}

谢谢。


当前回答

在Xcode 7上,无需编码,你可以简单地做到以下几点:

在大纲视图中,选择表视图单元格。 单元格嵌套在表视图控制器场景>表视图控制器>表视图下。你可能需要公开这些对象才能看到表格视图单元格)

在Attributes检查器中,找到标记为Selection的字段并选择None。 卡拉季奇检查员 有了这个选项,当用户点击单元格时,它将不会得到视觉突出显示。

其他回答

斯威夫特5: 在你的cellForRowAt函数中放置以下一行:

cell.selectionStyle = UITableViewCell.SelectionStyle.none

我喜欢Brian Chapados上面的回答。然而,这意味着你可能在cellForRowAtIndexPath和willSelectRowAtIndexPath中有重复的逻辑,这很容易失去同步。而不是复制逻辑,只需检查selectionStyle:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.selectionStyle == UITableViewCellSelectionStyleNone)
        return nil;

    else
        return indexPath;
}

使用这些数据源方法捕获选择。

– tableView:willSelectRowAtIndexPath: 
– tableView:didSelectRowAtIndexPath: 
– tableView:willDeselectRowAtIndexPath: 
– tableView:didDeselectRowAtIndexPath:

在这些方法中,您将检查所选行是否是您想要选择的行。如果是,采取行动,如果不是,什么都不做。

不幸的是,您不能只关闭一个部分的选择。要么整张桌子,要么什么都没有。

但是你可以将表格单元格的selectionStyle属性设置为UITableViewCellSelectionStyleNone。我相信这会让选择变得不可见。结合上述方法,应该使细胞从用户的角度看完全惰性。

Edit01:

如果有一个表,其中只有一些行是可选择的,那么可选择行的单元格在视觉上与不可选择行的单元格区别就很重要。chevron附件按钮是默认的方法。

无论你怎么做,你不希望你的用户尝试选择行,并认为应用程序已经错误,因为行没有做任何事情。

使用它可以使单元格看起来是禁用的,不可选择:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

重要:注意,这只是一个样式属性,实际上并没有禁用单元格。为了做到这一点,你必须检查selectionStylein你的didSelectRowAtIndexPath: delegate实现:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if(cell.selectionStyle == UITableViewCellSelectionStyleNone) {
        return;
    }

    // do your cell selection handling here
}

你只需要把这段代码放到cellForRowAtIndexPath中

禁用单元格的选择属性:(在点击单元格时)

cell.selectionStyle = UITableViewCellSelectionStyleNone;

选择单元格(点击单元格)

// Default style
cell.selectionStyle = UITableViewCellSelectionStyleBlue;

// Gray style
cell.selectionStyle = UITableViewCellSelectionStyleGray;

注意,单元格selectionStyle = UITableViewCellSelectionStyleNone;仍然会导致UI在用户触碰时调用didSelectRowAtIndexPath。为了避免这种情况,请按照下面的建议进行设置。

cell.userInteractionEnabled = NO;

代替。还要注意,你可能想要设置cell.textLabel.enabled = NO;使项目变灰。