私はスライドバーメニューに使用PKRevealController
しています。フロントコントローラーにはテーブルビューがあり、各セルのスワイプが表示されなくなったときに表示される [削除] ボタンcanEditRowAtIndexPath
を実装しているため、これを再び機能させるにはどうすればよいですか?PKRevealController
2 に答える
これを書いている時点では、考えられるすべての条件下で適切に動作するようにコントローラーの側でこれを修正する既知の方法は (少なくとも私には) ありません。つまり、上記のケースを自分で処理する必要があります。したがって、コントローラーはrevealPanGestureRecognizer
プロパティを公開します。
簡単に言うと、コントローラーをインスタンス化するときに、オプション ディクショナリでこのオプションを渡します。
NSDictionary *options = @{
PKRevealControllerRecognizesPanningOnFrontViewKey : @NO
};
これにより、正面図全体のパンベースの表示が無効になります。これで、releavePanGestureRecognizer を使用して、パンしたい任意のビューに追加して、ジェスチャ ベースのリビールを有効にすることができます。
(編集可能なセルを含むテーブルベースの環境で作業している場合)revealPanGestureRecognizer
フロント ビュー コントローラーのナビゲーション バー (おそらくある) に を追加することをお勧めします。
[self.navigationController.navigationBar addGestureRecognizer:self.revealController.revealPanGestureRecognizer];
ほら、パンがテーブル ビューに干渉しなくなりました。
(これに関する詳細と根拠については、https://github.com/pkluz/PKRevealController/pull/76を参照してください)
--
注: UIGestureRecognizerDelegate プロトコル メソッドを使用してこれを処理する別の方法があります。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
UITableView に約 5 つのジェスチャ認識機能があり、セルの編集モードをグローバルに処理する方法を見ると、ちょっと面倒になることがありますが...
これは、誰が使用したかで機能しますPkRevealController
:
self.revealController.frontViewController.revealController.recognizesPanningOnFrontView = NO;
これは私にとってはうまくいきました。
更新: ビュー コントローラーをプッシュしたところからコードを追加しました。現在、View Controller ではスライドのみが有効になり、他のクラスでは有効になりません。
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([viewController isMemberOfClass:[ViewController class]])
self.revealController.frontViewController.revealController.recognizesPanningOnFrontView = YES;
else
self.revealController.frontViewController.revealController.recognizesPanningOnFrontView = NO;
}
PKRevealcontroller をプッシュする必要があります。したがって、そのクラスからUINavigationController
デリゲート メソッドを使用し、チェックを入れてこれらの行を追加します。
公開コントローラーの初期化中に Option パラメーターを使用できますが、それは私の目的全体を解決しませんでした。