質問

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]; 
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top