回答:
わかりました、とても簡単です。これは私がこれを解決するためにしたことです:
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:
削除をコミットするには、まだ実装する必要があります。
CanEditRowAt関数を実装する必要があります。
EditingStyleForRowAt関数で.deleteを返すことができるため、編集モードでも削除できます。
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
if tableView.isEditing {
return true
}
return false
}
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
return .delete
}
基本的に、メソッドを使用して編集を有効または無効にします
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
編集が有効になっている場合、赤い削除アイコンが表示され、削除の確認がユーザーに要求されます。ユーザーが確認した場合、デリゲートメソッド
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
削除要求が通知されます。このメソッドを実装すると、スワイプで削除が自動的にアクティブになります。このメソッドを実装しない場合、スワイプして削除することはできませんが、実際に行を削除することはできません。したがって、私の知る限りでは、文書化されていないプライベートAPIを使用しない限り、要求したことを達成することはできません。おそらく、これがAppleアプリケーションの実装方法です。
C#の場合:
スワイプで[削除]オプションを使用して行を有効/無効にする必要があるのと同じ問題がありました。複数の行を左にスワイプして削除する必要があり、それらを別の色に保ちます。私はこのロジックを使用して達成しました。
[Export("tableView:canEditRowAtIndexPath:")]
public bool CanEditRow(UITableView tableView, NSIndexPath indexPath)
{
if (deletedIndexes.Contains(indexPath.Row)){
return false;
}
else{
return true;
}
}
deletedIndexesは、重複することなくテーブルから削除されるインデックスのリストであることに注意してください。このコードは、行が削除されているかどうかを確認し、スワイプを無効にするか、その逆を行います。
同等のデリゲート関数はSwift is canEditRowAtIndexPath
です。
私はこの問題にも遭遇し、以下のコードで修正しました。それがお役に立てば幸いです。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
BOOL deleteBySwipe = NO;
for (UIGestureRecognizer* g in tableView.gestureRecognizers) {
if (g.state == UIGestureRecognizerStateEnded) {
deleteBySwipe = YES;
break;
}
}
if (deleteBySwipe) {
//this gesture may cause delete unintendedly
return;
}
//do delete
}
}