UITableViewController 中的 UISearchController — 行不可选择且表格视图显示为灰色
Posted
技术标签:
【中文标题】UITableViewController 中的 UISearchController — 行不可选择且表格视图显示为灰色【英文标题】:UISearchController in a UITableViewController—Rows not selectable and table view is greyed out 【发布时间】:2015-02-06 19:57:26 【问题描述】:我试图让 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
【问题讨论】:
【参考方案1】:也许是因为在您正在搜索的同一视图中显示搜索结果?尝试防止视图变暗...
self.searchController.dimsBackgroundDuringPresentation = NO;
【讨论】:
这正是问题所在。让我感到羞耻,因为 API 文档特别提到在同一视图中搜索/呈现时需要此代码。非常感谢!以上是关于UITableViewController 中的 UISearchController — 行不可选择且表格视图显示为灰色的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewController 中的 iOS tableHeaderView 从不显示
框架中的 UITableViewController 未调用 didSelectRowAtIndexPath