62

よし、 と の中に がいくつかありUITextFieldsますUITextViews。がタッチまたはスクロールさUIScrollViewれるたびにキーボードが消えるように設定したいと思いscrollviewます (もちろん、テキスト フィールド/ビュー内でタッチダウンしたときは除きます)。

これを行う私の現在の試みは、をサブクラスに置き換え、touchesBeganUIScrollViewメソッド内で removeKeyboard 関数 (メイン ビュー コントローラー内で定義) を呼び出すように設定することです。ただし、これはビューが単にスクロールされたときではなく、通常のタッチでのみキーボードを削除します。では、内部のキーボードを取り外す最良の方法は何ですか?UIScrollView

よろしくお願いします。

4

12 に答える 12

51

少し遅れましたが、他の誰かがこの問題に対する答えを探している場合、これは私がそれを解決するために行った方法です:

1) ターゲット コールバック メソッドを使用してタップ ジェスチャ レコグナイザを作成し、すべてのフィールドで rejectFirstResponder を使用してキーボードを閉じます。

2) スクロールビューにタップ ジェスチャを追加します。

次に例を示します。

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];

// prevents the scroll view from swallowing up the touch event of child buttons
tapGesture.cancelsTouchesInView = NO;    

[pageScrollView addGestureRecognizer:tapGesture];

[tapGesture release];

...

// method to hide keyboard when user taps on a scrollview
-(void)hideKeyboard
{
    [myTextFieldInScrollView resignFirstResponder];
}
于 2012-06-22T03:11:05.493 に答える
39

本質は同じですが、コードは少ない方が好みです。

属性インスペクターで scrollView がスクロールされたときにキーボードが非表示になるように設定します。

scrollView がスクロールされたときにキーボードを非表示にする

次に、scrollView がタップされたときにキーボードを非表示にします。

  1. Tap Gesture Recognizer を scrollView にドラッグします
  2. Ctrl-ドラッグ
  3. アクションを起こす
  4. アクションの 1 つの行のみ —— scrollView.endEditing(true). Objective-C を使用している場合は、[self.scrollView endEditing: YES];
于 2015-03-25T15:29:20.617 に答える
9

UIScrollView のkeyboardDismissModeプロパティを見てください。

// will hide keyboard when your text field is about to go beyond the keyboard.
vwScrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

// will hide keyboard instantly once the scroll view started scrolling by user.
vwScrollView.keyboardDismissMode = UIScrollViewKeyboardDismissOnDrag;

// If you need to hide keyboard on tap of scroll view,consider adding a tap gesture or sub class and override touchesbegan: method.

スウィフト版

vwScrollView.keyboardDismissMode = .interactive
vwScrollView.keyboardDismissMode = .onDrag
于 2016-09-23T15:02:45.580 に答える
3

少し遅れましたが、他の誰かがSwift 3でこの問題に対する答えを探している場合:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    view.endEditing(true)
}
于 2016-09-23T14:28:40.873 に答える
1

このスクロール ビュー デリゲート メソッドを試してください -

IB でデリゲートをリンクしてビューをスクロールし、このコードをコピーします (必要に応じて変更します)。

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{         
//sample code    
    [challengeABallotComponent.voterNameTextField resignFirstResponder];
    [challengeABallotComponent.ballotNumberTextField resignFirstResponder];
    [locationInformation.pollingLocation resignFirstResponder];
}

これはうまくいくはずです。他のデリゲートメソッドも試すことができます

   -(void)scrollViewDidScroll: (UIScrollView *)scrollView 
{
//do your stuff
}
于 2012-09-11T05:21:06.627 に答える