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

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

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

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

谢谢。


当前回答

从iOS 6开始,你可以使用

-tableView:shouldHighlightRowAtIndexPath:

如果您返回NO,它将禁用选择高亮显示和故事板触发的连接到该单元格的segue。

该方法在触摸到一行时被调用。向该消息返回NO将停止选择过程,并且不会导致当前选定的行在触摸停止时失去选定的外观。

UITableViewDelegate协议引用

其他回答

从iOS 6开始,你可以使用

-tableView:shouldHighlightRowAtIndexPath:

如果您返回NO,它将禁用选择高亮显示和故事板触发的连接到该单元格的segue。

该方法在触摸到一行时被调用。向该消息返回NO将停止选择过程,并且不会导致当前选定的行在触摸停止时失去选定的外观。

UITableViewDelegate协议引用

你需要做如下的事情来禁用cellForRowAtIndexPath方法中的单元格选择:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell setUserInteractionEnabled:NO];

要将单元格显示为灰色,在tableView中放入以下内容:WillDisplayCell:forRowAtIndexPath方法:

[cell setAlpha:0.5];

一种方法允许您控制交互性,另一种方法允许您控制UI外观。

以上答案中没有一个真正正确地解决了这个问题。原因是我们想要禁用单元格的选择,但不一定是单元格内的子视图。

在我的情况下,我是在行中间呈现一个UISwitch,我想禁用选择其余的行(这是空的),但不是为开关!正确的方法是在方法中

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

哪里有陈述的形式

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

禁用对特定单元格的选择,同时允许用户操作开关,从而使用适当的选择器。如果有人通过控件禁用用户交互,则不成立

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

方法,它只是准备单元,不允许与UISwitch交互。

此外,利用该方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

以取消选择具有窗体语句的单元格

[tableView deselectRowAtIndexPath:indexPath animated:NO];

当用户按下单元格的原始内容视图时,仍然显示所选择的行。

这只是我的个人意见。我敢肯定很多人会发现这很有用。

要停止选定某些单元格,请使用以下命令:

cell.userInteractionEnabled = NO;

除了阻止选择,这也会阻止设置了tableView:didSelectRowAtIndexPath的单元格被调用。

实现方法tableView:willSelectRowAtIndexPath: 在表的数据源中。如果希望突出显示路径处的行,则返回给定的indexPath。如果没有,则返回nil。

示例来自我的应用程序:

- (NSIndexPath *)tableView:(UITableView *)tableView
    willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MySelectableObj* obj = [self objectAtPath:indexPath];
    if(obj==nil) return nil;
    return indexPath;
}

这样做的好处是,如果上面的方法返回nil, shouldPerformSegueWithIdentifier:sender:将不会被调用,尽管我只是为了完整性而重复上面的测试。