首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UISearchController不把视图控制器推到前面,而是在UISearchController下面

UISearchController不把视图控制器推到前面,而是在UISearchController下面
EN

Stack Overflow用户
提问于 2017-03-17 10:42:47
回答 2查看 2.8K关注 0票数 3

自动表示UISearchController和自己呈现搜索控制器之间的行为不同。

代码语言:javascript
复制
@implementation MyViewComtroller

// click search barbutton on right of navigationBar
- (void)searchAction:(id)sender {
    ArticleSearchViewController *searchResultsController = [[ArticleSearchViewController alloc] init];
    UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController];
    searchController.searchResultsUpdater = searchResultsController;
    searchController.searchBar.delegate = searchResultsController;
    searchController.delegate = searchResultsController;
    searchController.hidesNavigationBarDuringPresentation = NO;
    [self presentViewController:searchController animated:YES completion:nil];
}

@end

@implementation ArticleSearchViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    ArticleDetailController * articleDetailController = [ArticleDetailController new];
   [(UINavigationController *)self.presentingViewController pushViewController:articleDetailController animated:YES];
}

@end

推操作发生在UISearchController下面。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-20 09:58:19

您以错误的方式呈现搜索控制器。请看文档的一部分。

您可以同时使用搜索控制器和现有的视图控制器。当您有一个具有可搜索内容的视图控制器时,将UISearchController对象的搜索栏合并到视图控制器的接口中。当用户与该搜索栏交互时,搜索控制器将自动显示一个新的视图控制器和您指定的搜索结果。

而不是在主控制器中这样做:

代码语言:javascript
复制
[self presentViewController:searchController animated:YES completion:nil]; 

您应该在iOS 11上这样做:

代码语言:javascript
复制
self.definesPresentationContext = YES;
self.navigationItem.searchController = searchController;

或者在pre iOS 11上:

代码语言:javascript
复制
self.definesPresentationContext = YES;
self.navigationItem.titleView = searchController.searchBar;

或者将searchController.searchBar放置在所呈现的视图层次结构中的任何其他位置。

您还应该在像viewDidLoad这样的地方设置搜索控制器,而不是按下按钮。

您在ArticleSearchViewController中获取对您的ArticleSearchViewController的引用的方式必须更新为以下内容:

代码语言:javascript
复制
[self.presentingViewController.navigationController pushViewController:articleDetailController animated:YES];

具有可搜索内容的视图控制器:

代码语言:javascript
复制
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor blackColor]];

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    ArticleSearchViewController *searchResultsController = [sb instantiateViewControllerWithIdentifier:@"ArticleSearchViewController"];
    UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController];
    searchController.searchResultsUpdater = searchResultsController;
    searchController.searchBar.delegate = searchResultsController;
    searchController.delegate = searchResultsController;
    searchController.hidesNavigationBarDuringPresentation = NO;
//    [self presentViewController:searchController animated:YES completion:nil]; //WRONG
    self.definesPresentationContext = YES;
    self.navigationItem.searchController = searchController;
}

@end

结果主计长:

代码语言:javascript
复制
@implementation ArticleSearchViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    UIViewController * articleDetailController = [UIViewController new];
    [self.presentingViewController.navigationController pushViewController:articleDetailController animated:YES];
}

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    // update appropriately
}

@end
票数 9
EN

Stack Overflow用户

发布于 2020-04-20 18:23:51

这是一个更好的答案:

代码语言:javascript
复制
definesPresentationContext = true

把这个写在你的MyViewController

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42855378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档