2009-06-09 13 views
79

アラームアプリと同様のものが必要ですが、行を削除することはできませんが、編集モードで行を削除することはできます。UITableViewはスワイプを削除するのを無効にしますが、まだ編集モードで削除していますか?

tableView:commitEditingStyle:forRowAtIndexPath:をコメントアウトすると、削除するスワイプが無効になっていますが、編集モードでは削除ボタンが残っていますが、削除ボタンを押すとどうなりますか?何が呼び出されますか?

答えて

258

これはかなり簡単です。これは私がこの問題を解決するためにやったことです:

のObjective-C

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Detemine if it's in editing mode 
    if (self.tableView.editing) 
    { 
     return UITableViewCellEditingStyleDelete; 
    } 

    return UITableViewCellEditingStyleNone; 
} 

スウィフト2

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { 
    if tableView.editing { 
     return .Delete 
    } 

    return .None 
} 

スウィフト3

override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { 
    if tableView.isEditing { 
     return .delete 
    } 

    return .none 
} 

削除をコミットするにはまだtableView:commitEditingStyle:forRowAtIndexPath:を実装する必要があります。

+0

buを削除してからスワイプすると自動的に有効になります。か否か? –

+0

いいえ、スワイプは編集モードでない場合、有効になりません。だから、私はデフォルトとしてUITableViewCellEditingStyleNoneを返します。 – willi

+3

commitEditingStyleで(editingStyle == UITableViewCellEditingStyleDelete)が必要な場合は忘れてください。 – willi

1

基本的には、有効または方法

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 

を使用して編集を無効に編集が有効になっている場合は、赤い削除アイコンが表示され、ユーザーに要求され、削除の立体構造。ユーザーが確認した場合、デリゲートメソッド

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

が削除要求を通知されます。このメソッドを実装すると、スワイプして削除すると自動的にアクティブになります。このメソッドを実装していない場合は、スワイプが削除されますが、実際に行を削除することはできません。したがって、私の知る限りでは、文書化されていないプライベートAPIを使用しない限り、あなたが求めたものを達成することはできません。おそらくこれがAppleアプリケーションの実装方法です。

+1

私はにtableViewにUITableViewCellEditingStyleDelete復帰することによって、これを解決:editingStyleForRowAtIndexPathを:それは編集モードでいます。 – willi

8

tableView:commitEditingStyle:forRowAtIndexPath:が実装されていない限り、削除を有効にすることはできません。

私は開発中でしたが、実装していなかったため、スワイプトゥーデリートが有効になっていませんでした。もちろん、完成したアプリでは、それはいつも実装されるでしょう。さもなければ編集がないからです。

3

スウィフトバージョン:

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { 

    if(do something){ 

     return UITableViewCellEditingStyle.Delete or UITableViewCellEditingStyle.Insert 

    } 
    return UITableViewCellEditingStyle.None 

} 
関連する問題