ios abort didSelectRowAtIndexPath

时间:2012-01-16 16:02:37

标签: ios uitableview

我想在不满足某个条件时中止此方法,我应该怎么做?

我不使用tableView:willSelectRowAtIndexPath:方法。我认为可以将这两种方法结合起来以防止选择某些行并将其推送到另一个ViewController中?


编辑:

伙计们,非常感谢你。

现在这段代码完美无缺:

- (NSIndexPath*)tableView:(UITableView *)tableView1 willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger totalcount = [totalarr count]; //totalarr is a global mutable array.

    NSIndexPath *rowToSelect = indexPath;

    if (totalcount == 0)
    {
        rowToSelect = nil;
    }
    return rowToSelect;

}

2 个答案:

答案 0 :(得分:3)

当要选择一行时,

tableView:willSelectRowAtIndexPath:被发送到表视图委托。您的代理人有机会更改选择,或者通过为替代选择返回NSIndexPath对象来完全取消选择,或nil选择任何内容。

因此,如果您想禁止选择某些行,请使用tableView:t willSelectRowAtIndexPath:p,对p进行检查,如果您不希望选择该行,请返回{{1 }}。如果取消选择,则永远不会调用nil

如果您有机会在tableView:didSelectRowAtIndexPath:中执行此操作,请不要“取消”didXXYY类型方法中的内容。 willXXYY表示已经提交了选择; UIKit可能已经显示了这个,其他事件监听器可能已经响应,等等。它很容易导致奇怪的行为。

答案 1 :(得分:2)

如您所述,实施tableView:willSelectRowAtIndexPath:。如果希望行可选,则返回提供的索引路径,否则返回nil。