ios - 以编程方式显示导航栏的 UISearchController

标签 ios swift uinavigationcontroller uisearchcontroller

我在 viewDidLoad() 中配置了一个 UISearchController 如下:

let searchController = UISearchController(searchResultsController: nil);
searchController.delegate = self;
searchController.searchResultsUpdater = self;
searchController.searchBar.delegate = self;

self.searchController.isActive = true;
self.searchController.searchBar.becomeFirstResponder();

self.navigationItem.searchController = searchController;

尽管我已经设置了isActive 并将searchBar 设置为firstResponder,但是当 View 出现在屏幕上时,UISearchController 并未处于事件状态。手动点击该字段可以正确打开它。

在 iOS 12 中,isActivebecomeFirstResponder 属性是否在 viewDidLoad 中不受尊重?

最佳答案

不确定那里发生了什么,但它在导航栏中是独一无二的。

不过这似乎可以解决问题。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    DispatchQueue.main.async(searchController.searchBar.becomeFirstResponder)
}

关于ios - 以编程方式显示导航栏的 UISearchController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54157674/

相关文章:

iOS:导航 Controller 标题未居中

android - kotlin 多平台 : how to reduce build time?

iOS UIManagedDocument : can't open pre loaded persistent store

ios - 如何在一个 CollectionView 中加载多个 nib 文件?

ios - 如何从第一个选项卡转到选项卡栏 Controller 的第二个选项卡?

xcode - 不激活全屏模式的 Kiosk 风格 - OS X

swift - 使用模块 'CALayer' 作为类型

ios - MonoTouch : UITableViewController, NavigationController 在 NavigationController.PushViewController 之后为空

ios - 呈现具有透明背景的模态视图 Controller

ios - 如何在将数据传递给 viewController 时实例化 navigationController?