首次应用程序的这部分加载搜索控制器的搜索栏的光标显示,视需要。
(问题)当搜索被解除然后(稍后)重新编码时,无光标:
这是可重复的,只需加载/解除,即没有任何东西显然可以/应该改变事物的色调,导致光标成为背景的颜色(通常是缺少光标的答案,来自SO Q& As我已经看过这个话题了。)那就是说,没有别的东西不起作用,只是光标消失了。
一些(可能)复杂因素:
我已经做过各种尝试让孩子VC创建自己的SearchController,和/或在根VC上使用它,依此类推。各种排列似乎都有效,但同样存在缺陷。 (因此,我觉得我在寻找问题/解决方案来源的错误位置。)
我不能排除游标颜色已经改变,我不完全理解它是如何设置/继承的,特别是考虑到我拥有的VC堆栈,以及如何在调试器中测试它。我认为这就像我设置全局色调一样简单。
注意:此应用使用直接设置的情节提要,并且未使用外观代理多。那说它有:
// Default tint for application...
UIApplication.sharedApplication().delegate?.window??.tintColor = mainBrandColor
UIToolbar.appearance().tintColor = mainBrandColor
...我尝试过UISearchBar的各种排列,UINavigationBar色调通过外观代理w /相同的行为(首先工作,后来没那么多。)在不同的时间,(即工作时和不)它显示相同的颜色:
(lldb) po searchController.searchBar.tintColor
注意:单独使用UISearchController(当调用VC不是容器的子节点,而是推送VC时)不会显示此问题。光标仍然是正确的颜色。
环境:这是XCode 7.1上Swift中的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
我尝试过使用和不使用延迟加载,以及破坏/重新创建而不是。
任何关于在哪里寻找/如何排查问题的指示/想法都将不胜感激。
答案 0 :(得分:4)
self.searchController.searchBar.showsCancelButton = NO;
我有完全相同的问题,事实证明这件事情有点相关。尝试将其注释掉,看看光标是否已经回来了。
答案 1 :(得分:3)
我遇到了同样的问题。对我有用的诀窍是当它成为第一个响应者时设置UISearchBar的tintColor
import math
rounded_up = math.ceil(x / 10) * 10
result = rounded_up - x
答案 2 :(得分:2)
我对同样的问题感到很头疼。 user1491604(第一个答案)是正确的,问题的原因是:
searchController.searchBar.showsCancelButton = false //Swift 3
评论它完全解决了问题但后来我遇到了如果 DIDN' T 想要显示取消按钮,该怎么办:
如果您根本不想显示取消按钮,则用户1491604的回答将无法正常工作。我按照Vitya Shurapov的回答(在这种情况下工作)来实现我自己的SearchController:
class CustomSearchBar: UISearchBar {
override func setShowsCancelButton(_ showsCancelButton: Bool, animated: Bool) {
super.setShowsCancelButton(false, animated: false)
}
}
class CustomSearchController: UISearchController {
lazy var _searchBar: CustomSearchBar = {
[unowned self] in
let customSearchBar = CustomSearchBar(frame: CGRect.zero)
return customSearchBar
}()
override var searchBar: UISearchBar {
get {
return _searchBar
}
}
}
然后在我使用的viewDidLoad中使用它:
let searchController = CustomSearchController(searchResultsController: nil)
//...configure the rest of the searchController...
//DELETE- searchController.searchBar.showsCancelButton -you can delete this line wherever your using it
问题解决了我
答案 3 :(得分:1)
我遇到同样的问题,如果你设置dimsBackgroundDuringPresentation = NO
和obscuresBackgroundDuringPresentation = NO
,即使隐藏了取消按钮,你也会再次看到光标。
答案 4 :(得分:0)
将故事板中的搜索view
色调颜色设置为您希望用作光标的任何颜色。
小心
在
中设置色调颜色view
部分
而不是searchBar
部分,位于故事板中的attribute inspector
。
答案 5 :(得分:0)
对我来说,有效的解决方案是:
searchBar.setShowsCancelButton(false, animated: false)
searchBar.becomeFirstResponder()
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar)
中的