繁体   English   中英

iOS 添加 UISearchController 是取消隐藏 NavigationBar

[英]iOS adding a UISearchController is unhiding the NavigationBar

当我使用 UISearchController 更新我的表格视图时,我遇到了这个奇怪的副作用(如果我从表格视图中选择了一些东西而不搜索错误不会自己表现出来)。 但是当我搜索时,选择一个单元格,然后popViewControllerAnimated:由于某种原因导航栏不再隐藏。 我想认为这是 iOS 中的一个错误,而不是特定于我的代码。 但我想我会看看是否有人能发现我的代码中的错误,或者对我可能做错的事情有任何想法。 我添加了[self.navigationController setNavigationBarHidden:YES]; 到我的rootView viewWillAppear ,但在动画结束之前栏不会消失。

我的 TableView/UISearchController 代码:

@interface LBSelectUniversityView()<UISearchResultsUpdating, UISearchBarDelegate>
@property (strong, nonatomic) UISearchController *searchController;
@end

@implementation LBSelectUniversityView {
    NSArray *schoolNames;
    NSArray *searchResults;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    schoolNames = [[LBUtilities sharedInstance] schoolNames];
    searchResults = schoolNames;
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.searchController.searchBar.delegate = self;
    self.tableView.tableHeaderView = self.searchController.searchBar;
    self.definesPresentationContext = YES;
    [self.searchController.searchBar sizeToFit];
}

#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return searchResults.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:CellIdentifier];
    }
    ...
    return cell;
}

- (void)filterContentForSearchText:(NSString*)searchText{
    if ([searchText isEqualToString:@""]) return;

    NSPredicate *resultPredicate = [NSPredicate
                                    predicateWithFormat:@"SELF contains[cd] %@",
                                    searchText];
    searchResults = [schoolNames filteredArrayUsingPredicate:resultPredicate];
}

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{
    NSString *searchString = searchController.searchBar.text;
    [self filterContentForSearchText:searchString];
    [self.tableView reloadData];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    [self.navigationController popViewControllerAnimated:YES];
}

@end

如果您设置searchController.hidesNavigationBarDuringPresentation = NO问题会消失吗?

也许正在发生以下情况:

  1. 当您开始搜索时, searchController.active设置为YES 因此searchController调用[... setNavigationBarHidden:YES]因为UISearchController.hidesNavigationBarDuringPresentation = YES默认情况下。
  2. popViewControllerAnimated:被调用。
  3. searchController.active设置为NO ,因此searchController调用[... setNavigationBarHidden:NO] 这会导致显示导航栏。

我认为一旦您的搜索结果回来,您正在重新加载您的主表而不是搜索表。 这是您应该如何在搜索结果表上加载数据。

self.searchController.searchResultsTableView reloadData];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM