REFrostedViewControllerとUItableViewCellの横滑りで削除されたピット

2904 ワード

最近のプロジェクトではサイドスライドメニューを使い、REFrostedViewControllerをテストしても需要を満たすことができ、車輪を繰り返さない原則で使用することにした.
作者:romaonthego提供的Demo比较的に游びやすくて、见るとすぐに分かって、そこで私もUINavigationControllerをしてUIPanGestureRecognizerジェスチャーに参加してリアルタイムにメニューを移动して、すべてのビューコントローラはすべてこのUINavigationControllerの管理の下で健康に成长します.
私が1つの需要を受け取るまで(つまりCellの側面滑り削除)、これはとても簡単なことだと思って、この需要を見て、また楽を盗んで、Androidは卵を痛めて(よくないと聞いて、具体的には私も知らない)、直接システム提供の代理店で3回5回2回を除いて、それではこの時に糸滑りを準備している間に、穴を掘りました.
横滑りして削除しても何年も反応しないで、考えるのが上手な私は淡々と排除法を使って、UItableViewはすべて特に何年使ったと思って、まだ間違っていますか?やはり各种の検査、问题がないことを発见して、仕方なくまた以前のコードを见て、すべて妥当で、使い方は绝対に间违いありません:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleDelete;
}

それは今iOS 9の穴を踏んだのではないかと疑っています.いろいろな資料を調べても、発見してもそうではありません.仕方なく自分を疑って、新しい空の工事を書くことにしました.最後に自分のコードをチェックするしかありません(プログラム犬に問題があったら、まず人を疑うのが一番好きです).
いろいろな検査を経て、绝対にすべて正しい书き方をして、兄はどうして间违えることができて、振り返っても夜に午后のコードがShitであることに気づいていません(PS:进歩速度が遅すぎるようです).最後に暴力テストを経て、たまにCellで横滑り削除を引き出すことができ、これでジェスチャー問題に上昇し、ジェスチャーから調べることにした.
案の定、自分がUINavigationControllerに加えたUIPanGestureRecognizerは、サイドスライド削除ジェスチャーに影響を及ぼした.2つのジェスチャーが衝突したらどうするのか、直接やりましょう.まだ何が言えますか...
たくさん突っ込んで、本題に入っても、実は何も言うことはありません.UIGestureRecognizerDelegateの方法でジェスチャーが同時に存在する問題を解決します.
直接コード:
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognized:)];
panGesture.delegate = self;
[self.view addGestureRecognizer:panGesture];
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    
    if ([[otherGestureRecognizer.view class] isSubclassOfClass:[UITableView class]]) {
        return NO;
    }

    if( [[otherGestureRecognizer.view class] isSubclassOfClass:[UITableViewCell class]] ||
       [NSStringFromClass([otherGestureRecognizer.view class]) isEqualToString:@"UITableViewCellScrollView"] ||
       [NSStringFromClass([otherGestureRecognizer.view class]) isEqualToString:@"UITableViewWrapperView"]) {
        
        return YES;
    }
    return YES;
}

問題を解決する考え方と肝心な方法はgestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:の方法の中で、私達はUITableViewの上のジェスチャーを捕獲する時ジェスチャーが同時に存在することを許さないで、Cellの上のジェスチャーを捕獲する時、このようにやっと横滑りして削除することができて、その他の情況の下で処理する必要がなくて、直接YESに戻ってREFrostedViewControllerにジェスチャーを処理して横滑りしてメニューを弾き出すようにします.
はい、ここにはREFrostedViewControllerUITableViewCellの横滑り削除の穴しか埋まっていません.他の仲間が出会って一緒に解決しましょう.