2012-01-16 13 views
1

特定の条件が満たされていないときにこのメソッドを中止したいのですが、どのようにすればいいですか?ios abort didSelectRowAtIndexPath

私はtableView:willSelectRowAtIndexPath:メソッドを使用しません。私は、特定の行が選択され、別のViewControllerにプッシュされるのを防ぐために、これらの2つのメソッドを組み合わせることが可能だと思いますか?


EDIT:

みんな、どうもありがとうございました。

は今、このコードは完璧に動作します:あなたが言及したよう

- (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

2

は、tableView:willSelectRowAtIndexPath:を実装します。行を選択可能にする場合は、指定されたインデックスパスを返し、それ以外の場合はnilを返します。

+0

ご協力いただきありがとうございます。 – wagashi