6

UIViewController が 2 回目にナビゲーション コントローラにプッシュされたときに、UISearchBar がフォーカスを取得せず、キーボードが表示されないのはなぜですか? ビュー全体のどの要素にもフォーカスがないようです。

MY USE CASE : A と B の 2 つのビュー コントローラーがあります。遷移は A->B です。A、B はナビゲーション コントローラにプッシュされます。

  1. Bを初めて表示すると、フォーカスが検索バーに設定され、キーボードが表示されます。
  2. それから A に戻ります。そして、A->B から再び。今度フォーカスがなく、キーボードが表示されません。違います。

MY CODE : B UIViewController で、検索バーへの IBOutlet 接続が作成されます。

@property (weak, nonatomic) IBOutlet UISearchBar *mySearchBar;

mySearchBar のデリゲートも設定されています。viewDidAppearメソッドで B UIViewController の検索バーにフォーカスを設定します。

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];   
    [self performSelector:@selector(setCorrectFocus) withObject:NULL afterDelay:0.2];
}

-(void) setCorrectFocus {
     [self.mySearchBar becomeFirstResponder];
}

コントローラー間の遷移は、次のようなコードで手動で行われます。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
AController *a = [storyboard instantiateViewControllerWithIdentifier:@"A"];
[self.navigationController pushViewController:a animated:NO];
4

5 に答える 5

4

これを試して

-(void)viewDidAppear:(BOOL)animated
{
     [super viewDidAppear:animated];   
     [self setCorrectFocus];
}

-(void)setCorrectFocus 
{
     [self.mySearchBar becomeFirstResponder];
}
于 2013-09-12T07:00:26.523 に答える
2

長い間検索した後、エラーが見つかりました。ストーリーボードのどこかに、mySearchbar という名前の UISearchBar の古い接続が残っていました。私が修正しなければならなかったもう1つのことは、メソッドが

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;

前のコントローラーに戻るNOたびに、が返されました。YESただし、次回は検索バーにフォーカスを設定できるように戻る必要があります。

于 2013-09-12T09:28:54.563 に答える
0

追加してみましたかself.mySearchBar.delegate = self;

于 2013-09-12T01:30:32.737 に答える
-1

あなたの財産でstrongを使用する必要があります

@property (strong, nonatomic) IBOutlet UISearchBar *mySearchBar;

IBOutlet のプロパティでは、常に strong を設定してください。navigationController から B をポップすると、mySearchBar が解放されたので、B にプッシュバックすると、[self.mySearchBar becomeFirstResponder] が機能しません。

于 2013-09-12T02:37:44.197 に答える