5

UITableView私の見解では、特定のセクションのスワイプ削除モードの行を適用したいと考えています。私が実装したのは次のとおりです。

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@">> canEditRowAtIndexPath");
    if (indexPath.section == CanDeletedSection) {
        return YES;
    }else{
        return NO;
    }
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@">> editingStyleForRowAtIndexPath");
    if (indexPath.section == CanDeletedSection) {
        return UITableViewCellEditingStyleDelete;
    }
    return UITableViewCellEditingStyleNone;
}
 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
     NSLog(@">> commitEditingStyle");
     if (editingStyle == UITableViewCellEditingStyleDelete) {
         // dosomething
     }
}

しかし、表の行をスワイプすると、Deleteボタンが表示される場合と表示されない場合があります。ちなみに、私のセルはカスタマイズされており、 から継承されてUITableViewCellいます。

NSLog上記のメソッドに追加しました。ボタンが表示されない場合Delete、ログは次のようになります。

>> editingStyleForRowAtIndexPath
>> canEditRowAtIndexPath

ボタンが表示されると、ログは次のようになりDeleteます。

>> editingStyleForRowAtIndexPath
>> canEditRowAtIndexPath
>> editingStyleForRowAtIndexPath
>> canEditRowAtIndexPath
>> canEditRowAtIndexPath
>> editingStyleForRowAtIndexPath

カスタマイズされたセルを使用して、正常に動作するデモを作成しました。したがって、問題は、テーブル ビューを含むビュー コントローラーによって引き起こされます。ビュー コントローラーは別のビュー コントローラーから継承します。そのビュー コントローラーには、キーボードを非表示にするために使用されるタップ ジェスチャがあります。しかし、View Controllerからそれらを削除すると、結果は同じです。

4

4 に答える 4

8

ビューまたはスーパービューに他のジェスチャーがないかどうかを確認してください。UIGestureRecognizerDelegateその場合は、ジェスチャ デリゲートを設定した後に以下のメソッドを実装してください。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
 return YES;
}
于 2013-11-23T01:19:04.100 に答える
0

ビュー階層の他の場所にあるジェスチャ レコグナイザーは、スワイプ アクションをインターセプトしてブロックできます。

ビューコントローラーのこのカテゴリで解決しました:

@interface UIView (CellSwipeAdditions)
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
@end

@implementation UIView (CellSwipeAdditions)
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
        return YES;
    }
@end

この解決策に私を導いてくれたbademiに感謝します!

于 2016-10-07T19:53:06.623 に答える
0

特にシミュレーターでは、スワイプを正しく実行するのが難しい場合があります。コーディングの問題ではなく、物理的な問題である可能性が高いことがわかります。

また、カスタム セルに、スワイプをキャッチしてセルに渡さない要素が含まれていないかどうかを確認することもできます。

于 2012-12-18T20:52:02.170 に答える