ナビゲーションバーに検索バーを備えたUISearchControllerを実装しましたが、ビューが読み込まれたときに検索バーをアクティブにしたいのですが。アクティブとは、キーボードが表示され、ユーザーが検索バーをタップせずに検索を入力できることを意味します。
次のコードでUISearchControllerを初期化しました。
- (void)viewDidLoad
{
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
[self.searchController setSearchResultsUpdater:self];
[self.searchController setDimsBackgroundDuringPresentation:NO];
[self.searchController setHidesNavigationBarDuringPresentation:NO];
[self.navigationItem setTitleView:self.searchController.searchBar];
[self setDefinesPresentationContext:YES];
[self.searchController.searchBar setDelegate:self];
[self.searchController.searchBar setShowsCancelButton:YES];
[self.searchController.searchBar setPlaceholder:@"City or Airfield"];
[self.searchController.searchBar sizeToFit];
}
検索コントローラーをアクティブにして、[self.searchController.searchBar becomeFirstResponder]
を呼び出し、直接searchBarSearchButtonClicked
を呼び出そうとしましたが、何も機能しません。
電話してみてください
[self.searchController setActive:YES]
前
[self.searchController.searchBar becomeFirstResponder]
上記が機能しない場合は、次のようにしてみてください。
- (void)viewDidLoad {
[super viewDidLoad];
...
[self initializeSearchController];
....
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.searchController setActive:YES];
[self.searchController.searchBar becomeFirstResponder];
}
- (void)initializeSearchController {
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.delegate = self;
self.searchController.searchBar.delegate = self;
[self.searchController.searchBar sizeToFit];
[self.tableView setTableHeaderView:self.searchController.searchBar];
self.definesPresentationContext = YES;
}
検索バーをアクティブにするには:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.searchController setActive:YES];
}
「becomeFistResponder」を呼び出して、UISearchControllerがロードされている場合にのみキーボードを表示させることができます。
- (void)didPresentSearchController:(UISearchController *)searchController
{
[searchController.searchBar becomeFirstResponder];
}
他のユーザーが提案したことを行うことに加えて、私は次のことも行いました、そしてそれはうまくいきました:
searchController.definesPresentationContext = YES;