2

だから私はアプリを作っていますが、UISearchBar と UITextFields からキーボードを閉じるのに問題があります。これが私のアプリの構造です:

NavigationController -> ViewC1 - (モーダル) -> ViewC2 -(モーダル) -> ViewC3

ViewC1 に検索ボックスがあり、キーボードの [検索] ボタンを押すとキーボードが閉じられ、これは正常に機能します。ただし、ViewC3 に移動した後に ViewC1 に戻ると、[検索] ボタンを押してもキーボードが閉じなくなります。検索バーのデリゲート メソッドでは、次のように設定しました。

- (void) searchBarSearchButtonClicked:(UISearchBar *)search
{
if ([search isFirstResponder]) {
    [search resignFirstResponder];
  } else {
    [search becomeFirstResponder];
    [search resignFirstResponder];
  }
}

これで問題は解決せず、キーボードが消えない理由がわかりません。参考までに、元の ViewC1 に戻ると、ViewC3 は次のように閉じられます。

UIViewController *parent = self.presentingViewController;
[parent.presentingViewController dismissViewControllerAnimated:YES completion:nil];

どんな助けでも大歓迎です、ありがとう。

4

4 に答える 4

4

さて、私は問題が何であるかを理解しました。彼らの最初のレスポンダーは辞任していましたが、フォーカスの問題のためにキーボードが消えることはありませんでした。モーダル ビューには、キーボードを閉じないという既定の動作があります (明らかにバグではありません)。そのため、モーダルビューから戻った後も、この動作が続いていました (ファーストレスポンダーを辞任しますが、キーボードを閉じません)。これを解決した方法は、両方のモーダル ビュー .m ファイルに次のコードを配置することでした。

- (BOOL)disablesAutomaticKeyboardDismissal {
return NO;
}

これで解決しました。次に、次のいずれかを使用します。

[search resignFirstResponder];

また

[self.view endEditing: YES];

キーボードはうまく消えます!

于 2013-04-15T15:25:17.847 に答える
0

条件ステートメントがヒットしない理由を突き止めるには、ブレーク ポイントを使用してデバッグを行う必要があります。UIView で endEditing メソッドを使用して、検索がクリックされるたびにレスポンダーを単純に辞任することもできます。

- (void) searchBarSearchButtonClicked:(UISearchBar *)search
        [search endEditing:YES];
}

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html

于 2013-04-08T15:32:38.187 に答える
0

それを試してみてください....

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
   [mySearchBar resignFirstResponder];
}

IBOutlet UISearchBar *mySearchBar; を宣言してください。.h ファイル
で .xib ファイルでデリゲートを設定します。

これが役に立ったことを願っています

于 2013-04-11T11:53:24.733 に答える