UISearchController的UISearchBar的光标显示首次使用,而不是后续

Ada*_*ack 10 uiviewcontroller uisearchbar ios swift uisearchcontroller

第一次应用程序的这部分加载搜索控制器的搜索栏的光标显示,根据需要.

用光标搜索

(问题)当搜索被解除然后(稍后)重新编码时,没有光标:

搜索无光标

这是可重复的,只是加载/解除,即没有任何显然可以/应该改变事物的色调,导致光标是背景的颜色(通常是缺少光标的答案,从我看到的SO Q&As)这个话题.)也就是说,没有别的东西不能工作,只是光标消失了.

一些(可能)复杂因素:

  • 这个加载/卸载UISearchController的ViewController(并将UISearchBar嵌入到UINavigationController的标题中)是我的自定义容器VC中的内容VC.层次结构是:(1)UIWindow(2)UINavigationController(3)ContainerVC(4)ContainedVC [parent是ContainerVC,这个VC正在进行UISearchController的加载/卸载].
  • 有各种委托回调(UISearchController,UISearchBar)尝试自定义行为(例如隐藏取消按钮,停止之间的关闭),希望这些行为不会对事情产生影响,但仅限于FYI.
  • "卸载"(停止/拆除)涉及各种努力使其消失,从标题视图中删除搜索栏,设置搜索控制器active = false等.(因为它发生在此之后,它感觉可能是相关的,所以我尝试了各种排列以防万一有什么帮助.没有这样的运气.)

我已经做了各种尝试让孩子VC创建它自己的SearchController,和/或在根VC上使用它,依此类推.各种排列似乎都有效,但同样存在缺陷.(因此,我觉得我在寻找问题/解决方案来源的错误位置.)

我不能排除光标颜色已经改变,我不完全理解它是如何设置/继承的,特别是考虑到我拥有的VC堆栈,以及如何在调试器中测试它.我认为这就像我设置全局色调一样简单.

注意:这个程序是用故事板直接设置,并没有使用外观代理.这说它有:

    // Default tint for application...
    UIApplication.sharedApplication().delegate?.window??.tintColor = mainBrandColor
    UIToolbar.appearance().tintColor = mainBrandColor
Run Code Online (Sandbox Code Playgroud)

...我尝试过UISearchBar的各种排列,UINavigationBar色调通过外观代理w /相同的行为(首先工作,后来没那么多.)在不同时间,(即工作时和不工作时)看这个显示相同的颜色:

(lldb) po searchController.searchBar.tintColor
Run Code Online (Sandbox Code Playgroud)

注意:单独使用UISearchController(当调用VC不是容器的子代,而是推送VC时)并不能证明这个问题.光标保持正确的颜色.

环境:这是Swift on XCode 7.1上的iOS9.x应用程序.

这是一些代码,其中homeVC是父/容器VC:

    if nil == homeVC.searchController {
        homeVC.searchController = UISearchController(searchResultsController: nil)
        homeVC.searchController!.searchResultsUpdater = self
        homeVC.searchController!.delegate = self
        homeVC.searchController!.searchBar.delegate = self
        homeVC.searchController!.searchBar.showsCancelButton = false
        homeVC.searchController!.searchBar.returnKeyType = .Done
        homeVC.searchController!.searchBar.placeholder = "Add Item"
        homeVC.searchController!.searchBar.searchBarStyle = UISearchBarStyle.Minimal
        homeVC.searchController!.dimsBackgroundDuringPresentation = false
        homeVC.searchController!.hidesNavigationBarDuringPresentation = false
    }

    homeVC.navigationItem.titleView              = homeVC.searchController!.searchBar
Run Code Online (Sandbox Code Playgroud)

我试过有懒惰加载和没有加载,并且破坏/重新创建而不是.

关于在哪里寻找/如何排除故障的任何指示/想法将不胜感激.

小智 4

你在做什么 self.searchController.searchBar.showsCancelButton = NO;

我遇到了完全相同的问题,事实证明这件事在某种程度上是相关的。尝试将其注释掉,看看光标是否回来了。