class TestViewController: UIViewController, UISearchBarDelegate {
@IBOutlet weak var mySearchBar: UISearchBar!
var myOwnInputView = UIView(frame: CGRectMake(100,100,50,50))
overide func viewDidLoad() {
mySearchBar.delegate = self
mySearchBar.inputView = myOwnInputView // errors - "Cannot assign to the result of this expression
}
}
我试图给我的搜索栏分配一个自定义的输入视图,但是基于苹果文档(抱歉,再也找不到链接),对于UISearchBar,它似乎是一个只读值。查看this post,UISearchbar似乎有多个子视图,我需要转到UITextField部分才能更改inputview。然而,我对Obj-C还不够熟悉,我试图将代码转换成Swift也没有成功。
最佳答案
发现textfield
是UISearchbar
的子视图的子视图。
使用swift进入文本字段的代码:
var fakeView: UIView = UIView(frame: CGRectMake(100, 100, 50, 50))
@IBOutlet weak var searchBar: UISearchbar!
override func viewDidLoad() {
fakeView.backgroundColor = UIColor.redColor()
var c = 0
for v in (self.searchBar.subviews[0]).subviews {
c++
println("\(c).\(v)") //you should see two views - UISearchBarBackground and UISearcBarTextField
if let tf = v as? UITextField {
//do stuff to tf here.
//in my case, what I want is:
tf.inputView = fakeView
break
}
}
}}
以上代码的结果是,当触摸searchbar文本字段时,不会显示键盘,只是一个红色的矩形。
注——马特·纽伯格的“编程iOS8:深入了解视图、视图控制器和框架”(ISBN:978-1491908730)功不可没。准确地说是第八章。
关于swift - 设置Searchbar的inputview-Swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30565552/