2012-03-21 5 views
2

:最後の行が削除されているときに編集モードを終了についてExit Edit Mode退出編集モードとナビゲーションバーのアイテムを更新

は、私の質問は - どのようにナビゲーションバー「編集」の項目を更新していますか?最後の行を削除した後、このナビゲーションバーの項目をすべて削除して編集モードを終了します(これは以下の質問ごとに行います)。このボタンのステータスを「編集」に戻します最後の行を削除した後)。私が今やっている何ザッツ

- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 


... 


    if ([section count] == 0) { //last row in the section 
     [listOfItems removeObject:accessNumbers]; //updating my data source 
     tblSimpleTable.editing = NO; //added per the question above 
//   self.navigationItem.rightBarButtonItem = nil; --> thats what ideally i would want to do 
//  [self setEditing:YES animated:YES]; --> adding this manually doen't help 
    } 
    else 
    { 
... 
    } 
}  


} 

は助けてくれてありがとう!

更新:この行を追加することは役に立ちません。編集モードを終了するには、ナビゲーションバーの項目「Done」をクリックする必要があります。

[self.tblSimpleTable setEditing:YES animated:YES];

ナビゲーションバーの項目を非表示にしても、編集モードを終了できず、画面がフリーズしてしまいます(この場合、他のボタンも表示されます) 。 、すべて一緒に使用するボタンを削除するには

[self.tableview setEditing:NO animated:YES]; 

// Note that this only removes the right-most button. If you want to remove all of the buttons on the right side, use rightBarButtonItems instead. 
self.navigationItem.rightBarButtonItem = nil; 

// If you want it animated, use: 
[self.navigationItem setRightBarButtonItem:nil animated:YES]; 

答えて

1

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 

    BOOL answer = [section count] > 1; 
    self.navigationItem.rightBarButtonItem = (answer)? self.editButtonItem : nil; 
    return answer; 
} 
+0

私は恐れています... [self。テーブルビューsetEditing:いいえアニメーション:はい];編集モードを離れるように見えません - 画面はフリーズしています(他のボタンはアクティブではありません)。ナビゲーションバーからボタンを削除するとうまくいきますが、新しい行を追加すると、ボタンは(期待通りに)表示されますが、「完了」と表示され、「編集」ではなく表示されます – TommyG

+0

これは正しく表示されますが、元の投稿によって提供されます。 – danh

+0

私はトリガリングについてはかなり確信しています - 最後の行が削除されたときにのみ、これに入ります。私が説明した問題以外にも、最後の行が削除された後にnav bar itemが消えるなど、すべてが完璧に機能します。 – TommyG

3

あなたが別のコールバックでこの規則を施行することができ、これを使用して、編集モードを終了するには

+0

トリガーされています。私はそこに着いている。 100%陽性 – TommyG

+0

同じ要件がある古いプロジェクトを思い出しました。あなたは上記の編集を試すことができますか?私の場合、私はnav bar項目を持っていないので、私が追加した部分は、私のモデル数> 1をチェックし、結果のブールを返すと動作します – danh

+0

問題が見つかりました...私のseEditingはYESに設定... @ Inafzierは正しかった。 – TommyG

4

リンゴのドキュメントによると、あなたはあなたのtableView:commitEditingStyle:forRowAtIndexPath:内から[self.tableview setEditing:NO animated:YES]を呼び出すことはできません。

注:データソースはtableView:commitEditingStyle:forRowAtIndexPath:の実装内からsetEditing:animated:を呼び出すべきではありませんここでは、関連の抜粋です。何らかの理由で必要な場合は、performSelector:withObject:afterDelay:メソッドを使用して遅れて呼び出す必要があります。

おそらく、編集モードをオフにしてボタンを削除するセレクタを作成することができます。

1

私は(setEditingを呼び出した後に「編集」に戻すbarButtonItemのステータスを取得することはできません)同じことをやって問題を有し、かつこの回答方法が得るバックにある[編集]を変更することhttps://stackoverflow.com/a/11490594/2888978から学んだましたナーバーバーの 'Done'は、テーブルではなくビューコントローラでsetEditingに電話することです。次に、barButtonItemを.Noneに設定して、テーブルが空のときにナビゲーションバーから削除することができます。

ので、代わりの呼び出し:

self.tableView.setEditing(false, animated: true) 

をあなたは呼び出します。

self.setEditing(false, animated: true) 

をそれ以外の細胞のみ編集モードが変更されます。

関連する問題