我试图让一个UISearchController在一个UITableViewController中工作.我以编程方式创建所有内容(即无界面构建器).大多数情况下,一切正常工作,除了在搜索时,我无法选择任何表单元格(-tableView:didSelectRowAtIndexPath:从不调用).
但是,我不认为这是一个与代表有关的问题,或者是不被调用的另一个常见原因.在搜索时,包含搜索结果的表视图显示为灰色(即不活动),我相信这是为什么我无法选择任何单元格.
我的想法是,UISearchBar被卡住作为第一响应者,但是我尝试了各种方式来撤销这种状态和/或试图强制表视图成为第一响应者,但是所有这些都有灾难性的结果.
这是我的UITableViewController子类的相关代码:
@interface SearchResultsTableViewController() @property (copy,nonatomic) NSArray *searchResults; @property (strong,nonatomic) UISearchController *searchController; @end @implementation SearchResultsTableViewController - (NSArray *)searchResults { // Lazy array instantiation if (!_searchResults) { _searchResults = [[NSArray alloc] init]; } return _searchResults; } - (void)viewDidLoad { [super viewDidLoad]; [self setSearchController:[[UISearchController alloc] initWithSearchResultsController:nil]]; [[self searchController] setSearchResultsUpdater:self]; [[[self searchController] searchBar] setFrame:CGRectMake(0.0f,0.0f,CGRectGetWidth([[self tableView] frame]),44.0f)]; [[[self searchController] searchBar] setSearchBarStyle:UISearchBarStyleMinimal]; [[[self searchController] searchBar] setPlaceholder:@"Search Presentations"]; [[[self searchController] searchBar] setDelegate:self]; [[self tableView] setTableHeaderView:[[self searchController] searchBar]]; [[self tableView] setSeparatorStyle:UITableViewCellSeparatorStyleNone]; [[self tableView] setAllowsSelection:YES]; [[self tableView] setAllowsSelectionDuringEditing:YES]; [[self tableView] setDelegate:self]; [[self tableView] setDataSource:self]; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [[self searchResults] count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Search Results Cell"]; [cell setSelectionStyle:UITableViewCellSelectionStyleDefault]; [cell setUserInteractionEnabled:YES]; [[cell textLabel] setEnabled:YES]; FXIPresentation *presentation = nil; presentation = [[self searchResults] objectAtIndex:[indexPath row]]; [[cell textLabel] setText:[[presentation title] substringFromIndex:3]]; [[cell textLabel] setTextColor:[UIColor colorWithRed:(18.0/255.0) green:(52.0/255.0) blue:(88.0/255.0) alpha:1.0f]]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Omitted / Never called } - (void)updateSearchResultsForSearchController:(UISearchController *)searchController { [self setSearchResults:nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title contains[c] %@",[[[self searchController] searchBar] text]]; [self setSearchResults:[[self fullResults] filteredArrayUsingPredicate:predicate]]; [[self tableView] reloadData]; } @end