6

アプリを開発した後、Scroll ビューを追加してすべての要素を埋め込む必要があることを発見しました。その後、キーボードの外側をタッチしてもキーボードが消えないことに気付きました。IBAction はスクローラーではなく ViewController に関連付けられているためです。ただし、スクローラーは IBAction を持つことはできません。これを助ける方法はありますか?Scroll ビューを追加しただけでキーボードを非表示にすることで、私は多くのことを検索しました。これはそれほど複雑ではないはずです。

ありがとう!

4

5 に答える 5

19

iOS 7 で最もクリーンな方法:

scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

迅速なバージョン:

scrollView.keyboardDismissMode = .interactive
于 2013-11-18T03:14:39.757 に答える
6

これを試してください:

UITapGestureRecognizer *yourTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollTap:)];
    [scrollView addGestureRecognizer:yourTap];
    [self.view addSubview:scrollView];

次に

- (void)scrollTap:(UIGestureRecognizer*)gestureRecognizer {

    //make keyboard disappear , you can use resignFirstResponder too, it depends.
    [self.view endEditing:YES];
}

***驚くべきことに、すべての要素をスクロールビューに埋め込む必要があると言いましたよね?、つまりUIButton、サブビューのようなものをスクロールビューに追加したことを意味し、初期化時UIButtonにアクションも追加する必要があるため、scrollTap では [self.view endEditting :YES] は、ある時点で押すと十分な cuz でUIScrollViewあり、その点がUIButtonである場合、サブビューとして追加すると最上層に留まる cuz のアクションがアクティブにUIButtonなり、その点がボタンでない場合は scrollTap が実行されます活性化されます。よく見てなかったのが残念ですが、私の言った通りになるはずです。

于 2013-02-07T02:05:51.387 に答える
2

@piam の回答に基づいて、簡単にコピーして貼り付けたい人向けの迅速なバージョンを次に示します。

//put this where you initialize your scroll view
var theTap = UITapGestureRecognizer(target: self, action: "scrollViewTapped:")
scrollView.addGestureRecognizer(theTap)

.

//This can go anywhere in your class
func scrollViewTapped(recognizer: UIGestureRecognizer) {
    scrollView.endEditing(true)
}

サイドノート:

テキストフィールドが次のように設定されていることを確認してください。

exampleTextField.delegate = self

クラスの一番上に追加しますUITextFieldDelegate

class ViewController: UIViewController, UITextFieldDelegate {
于 2015-03-30T13:46:13.057 に答える
0

UITapGestureRecognizerbaseViewControlls ビューに登録してから、ジェスチャーを処理できると思います

- (void)handleTap:(UITapGestureRecognizer *)recognizer
{
    if(yourScrollView.yourTextField.isFirstResponder)
    {
        [yourScrollView.yourTextField resignFirstResponder];
    }
}

または、キーボードが show の場合、キーボードと yourView の間にある baseView の上に透明なマスク ボタンを追加し、次のように送信者を受信しながらボタンを追加できます。

- (void)maskButton:(id)sender
{
    [_maskButton removeFromSuperView];
    if(yourScrollView.yourTextField.isFirstResponder)
    {
        [yourScrollView.yourTextField resignFirstResponder];
    }
}
于 2013-02-07T02:00:31.887 に答える