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也没有成功。

最佳答案

发现textfieldUISearchbar的子视图的子视图。
使用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/

10-10 23:24
查看更多