2012-01-16 88 views
1

我想中止這種方法,當某些條件不滿足時,我應該怎麼做?ios abort didSelectRowAtIndexPath

我不使用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; 

} 

回答

3

tableView:willSelectRowAtIndexPath:被髮送到表視圖委託當一個行即將被選中。您的代表有機會更改選擇,或者通過返回替代選擇的NSIndexPath對象或nil來完全取消選擇任何內容。

因此,如果您想禁止某些行的選擇,請使用tableView:t willSelectRowAtIndexPath:p,對p進行檢查,如果您不想選擇該選項,只需返回nil即可。如果您因此取消選擇,將永遠不會調用tableView:didSelectRowAtIndexPath:

如果您有機會在willXXYY中這樣做,請不要「取消」didXXYY類型方法中的內容。 did意味着選擇已經完成; UIKit可能已經顯示了這一點,其他事件監聽器可能已經做出響應,等等。它可能很容易導致奇怪的行爲。

+0

感謝您的迅速回復。我已經解決了我的問題:) – wagashi 2012-01-16 16:51:59

2

至於你提到,實施tableView:willSelectRowAtIndexPath:。當你希望該行可選時,返回提供的索引路徑,否則返回nil。

+0

感謝您的幫助,我很感激。 – wagashi 2012-01-16 16:52:14