SWRevealViewControllerスワイプのキーボードを廃棄します
-
21-12-2019 - |
質問
revealviewController"> revealviewController"> SWRevealViewController で、問題があります。私はシーンにテキストフィールドを持っています、キーボードが開いているときに左をスワイプすると、メニューが表示されますが、キーボードを消しません。左スワイプでキーボードを廃止するにはどうすればよいですか。
私は試した
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];
-(void)dismissKeyboard
{
[self.textField resignFirstResponder];
}
.
しかしそれはうまくいかないので、私は既にreviewViewControllerのためにPangeStreceCognizerを使用しているので、[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
UITapGestureRecognizer
を使用していますが、スワイプ用のタップでのみ機能します。
解決
私はあなたがアプリの代議員でデリゲートメソッドの1つを使用する必要があると思います。
ジェスチャーを追加してはいけない
appDelegate
でこのデリゲートを使用してください
すべてのマクロを削除する#if
で始まります
このメソッドにApp Delegateでブレークポイントを入れる
以下のDelegateメソッドは、SWRevealViewController
が移動またはスライスされた。
- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position
{
// NSLog( @"%@: %@", NSStringFromSelector(_cmd), [self stringFromFrontViewPosition:position]);
if(position == FrontViewPositionRight) //check the where to move
{
UINavigationController *viewController = revealController.frontViewController;
if([viewController.visibleViewController isKindOfClass:[FrontViewController class]])
{
[(FrontViewController *)viewController.visibleViewController dismissKeyboard]; //where this is the method declared in the FrontViewController.h file
}
}
}
.
警告が1つありますが、ブレイクポイントを置く これがあなたを助けることを願っています...
FrontViewController.h
-(void)dismissKeyboard; //add this
.
FrontViewController.m
-(void)dismissKeyboard
{
if([self.textField isFirstResponder]) //check
[self.textField resignFirstResponder];
}
. 他のヒント
私は同じ問題を抱えていました。
私は正面図として使用したView Controllerにself.revealController.delegate = self;
を追加しました。およびdelegateメソッドは呼び出されます。
私は使いました
- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{}
このデリゲート方法では、Delegateメソッドと私は[textField endEditing:YES];
を書きました。
私の正面図であるMy ViewController.hに<SWRevealViewControllerDelegate>
を追加しました。
これを試してみてください:
メソッドのswrevealviewcontoller.mに以下のコードを追加してください - (bool)_pangestureshouldbegin
[Self.View Endeating:はい];
まず最初にRevelToggleを置き換える必要があります。
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"reveal-icon.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(myMethod)];
self.navigationItem.leftBarButtonItem = barBtn;
.
とあなたの方法より:
-(void)myMethod{
[self.view endEditing:YES];
SWRevealViewController *reveal = self.revealViewController;
[reveal revealToggleAnimated:YES];
}
.
確かに働きます。
これを試してください
[[[self revealViewController] view] endEditing:YES]
.
これを追加
- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position
.
またはあなたの要求に基づく他の任意の代理法。
フロントビューの現在位置を確認し、隠れキーボードの書き込みコードを条件にしてください。
self.textField
が現在の最初のレスポンダであることを確認してください。UIGestureRecognizer
Delegateのメソッド– gestureRecognizerShouldBegin:
のメソッドのメソッドのメソッドのメソッドのメソッドのメソッドのメソッドのメソッドのメソッドのメソッドのメソッドのメソッドのメソッドを辞任しようとする場合
その機能ではいはい返金されます。
下記の方法を編集して
swrevealviewContoller.m
(IBAction)revealToggle:(id)sender {
[self.view endEditing:YES];
[self revealToggleAnimated:YES];
}
.