web-dev-qa-db-ja.com

UISearchController検索バーを自動的にアクティブにします

ナビゲーションバーに検索バーを備えた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を呼び出そうとしましたが、何も機能しません。

8
Nonouf

電話してみてください

[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;
}
14
SanitLee

検索バーをアクティブにするには:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self.searchController setActive:YES];
}

「becomeFistResponder」を呼び出して、UISearchControllerがロードされている場合にのみキーボードを表示させることができます。

- (void)didPresentSearchController:(UISearchController *)searchController
{
    [searchController.searchBar becomeFirstResponder];
}
7
dreamer.psp

他のユーザーが提案したことを行うことに加えて、私は次のことも行いました、そしてそれはうまくいきました:

searchController.definesPresentationContext = YES;

1
Natan R.