3

私はcustom UIViewから提示されたを持っていUIViewControllerます。このビューコントローラは、そのようないくつかのビューの1つを表示できます。これらのビューの1つに。がありUITextViewます。にテキストを入力し始めるとUITextView、キーボードが表示されます。ただし、ユーザーがテキストビューの外側をタップするたびにキーボードを閉じたいと思います。UIViews特定の条件に基づいてUIViewControllerによって複数を提示できるため、UITextViewデリゲートメソッドなどをにカプセル化しました。これは、同様custom UIViewの内部からの通知を使用して行いました。custom UIView

- (void)configureView
{ 
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

[nc addObserver:self selector:@selector(keyboardWillShow:) name:
 UIKeyboardWillShowNotification object:nil];

[nc addObserver:self selector:@selector(keyboardWillHide:) name:
 UIKeyboardWillHideNotification object:nil];

self.tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                           action:@selector(didTapAnywhere:)];
}

-(void) keyboardWillShow:(NSNotification *) note {
[self addGestureRecognizer:self.tapRecognizer];
}

-(void) keyboardWillHide:(NSNotification *) note
{
[self removeGestureRecognizer:self.tapRecognizer];
}

-(void)didTapAnywhere: (UITapGestureRecognizer*) recognizer {    
[self.detailsTextView resignFirstResponder];
}

ただし、didTapAnywhereが呼び出された場合、resignfirstresponderが接続されていても、キーボードは閉じられません。参考までに、の代理人はUITextViewですcustom UIView

これを行う方法で助けてください

4

2 に答える 2

5

試す

[self.view endEditing:YES];

ファーストレスポンダーを辞任する代わりに。これでうまくいくはずです。奇妙なのは、なぜ標準的なアプローチが機能しないのかということです...

于 2012-05-16T09:10:06.313 に答える
1

あなたはUITextViewDelegateあなたのクラスにdetailsTextView.delegate = selfあなたがあなたのdetailsTextViewを初期化するあなたのまたはあなたのviewDidLoadまたはどんなウェアにも含める必要があります..これがあなたの問題を解決することを願っています...

于 2012-05-16T09:10:16.010 に答える