使 UISearchController 搜索栏自动激活
Make UISearchController search bar automatically active
我已经在导航栏中实现了一个带有搜索栏的 UISearchController,我想在加载视图时激活搜索栏。当我说活动时,我的意思是键盘出现并且用户可以键入 his/her 搜索而无需点击搜索栏。
我使用以下代码初始化了 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;
我已经在导航栏中实现了一个带有搜索栏的 UISearchController,我想在加载视图时激活搜索栏。当我说活动时,我的意思是键盘出现并且用户可以键入 his/her 搜索而无需点击搜索栏。
我使用以下代码初始化了 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;