使单元格不可点击,但其上的按钮仍应可点击。

12

我有一个带有一些单元格的tableView。每个单元格还包含一个按钮。当用户点击按钮时,应该使单元格不可点击,但按钮应该是可点击的。因此,当用户点击一个不可点击的单元格的按钮时,该单元格应该再次变为可点击。

我尝试过:

cell.userInteractionEnabled = NO;

...但是接着按钮就再也无法被点击了。

提前感谢你的努力。

编辑 我的意思是:当我点击一个单元格时,会打开一个新视图。但是我希望当单元格不可点击时不会发生任何操作。


尝试在各个控件上设置 "userInteractionEnabled"。 - Marcus Adams
@MarcusAdams 但是我该怎么做呢? - user2650439
4个回答

19

无法点击是指什么?如果您只想让单元格不可选择,您可能正在寻找这个:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

如果您希望在禁用选择时防止代码被执行,只需在didSelectRowAtIndexPath:方法内检查选择属性即可。类似于以下内容:

if (tableView.allowsSelection) {
   // execute your code here
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.selectionStyle != UITableViewCellSelectionStyleNone) {
        //(your code opening a new view)
    }
}

请记住,您仍需使用此属性,当您不希望单元格可选时,请将其设置为UITableViewCellSelectionStyleNone,当您希望再次选择它时,请将其设置回UITableViewCellSelectionStyleBlue(或UITableViewCellSelectionStyleGray)。


但我仍然可以点击单元格,新的视图控制器就会打开...我唯一注意到的区别是当选中单元格时没有颜色...或者我理解错了吗? - user2650439
编辑过了。试试看有没有帮助。 - Lucas Eduardo
@LucasEduardo 好的...我明白了。如果我使用故事板,可以将这个与prepareForSegue方法结合起来吗? - user2650439
这取决于你想要做什么。问题在于在 prepareForSegue 中,你没有对所选的 indexPath(以及相应的单元格)进行引用,因此你需要将所选单元格存储在某个实例变量或类似的东西中。如果这个答案对你有帮助,请不要忘记接受它,以便将你的问题从未回答的部分中移除! - Lucas Eduardo
1
对于Swift 2,语法略有不同: cell.selectionStyle = .None; (注:该句为Swift代码) - dy_
这是使用Swift5编写的。我在我的静态tableView单元格中有4个按钮。 - Zhou Haibo

3

Swift 版本:

cell.selectionStyle = .none

0

通过将 selectionStyle 设置为 UITableViewCellSelectionStyleNone,可以取消选择。

cell.selectionStyle = UITableViewCellSelectionStyleNone;

-tableView:didSelectRowAtIndexPath: 方法中不执行任何操作。

你可以在该代理方法中进行选择,例如只有第一部分中的第一行具有按钮且不应执行任何操作:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *indexPathForDisabledCell = [NSIndexPath indexPathForRow:0
                                                               inSection:0];
    if([indexPath compare:indexPathForDisabledCell] != NSOrderedSame) {
        //Do whatever you do with other cells
    }
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接