ios – UISableContController中的UISearchController – 行不可选,表视图是灰色的

我试图让一个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

解决方法

也许是因为您正在搜索的相同视图中显示搜索结果?尝试防止视图变暗
self.searchController.dimsBackgroundDuringPresentation = NO;

以上是来客网为你收集整理的ios – UISableContController中的UISearchController – 行不可选,表视图是灰色的全部内容,希望文章能够帮你解决ios – UISableContController中的UISearchController – 行不可选,表视图是灰色的所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。