【问题标题】:Set inputview for Searchbar - Swift为搜索栏设置输入视图 - Swift
【发布时间】:2016-05-23 05:12:43
【问题描述】:
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 部分才能更改输入视图。但是,我对 Obj-C 不够熟悉,而且我尝试将代码转换为 Swift 的尝试也没有成功。

【问题讨论】:

    标签: swift uisearchbar


    【解决方案1】:

    这是最简单的方法:

    let searchTextField = searchBar.valueForKey("_searchField") as! UITextField
    searchTextField.inputView = myOwnInputView
    

    【讨论】:

      【解决方案2】:

      发现textfieldUISearchbar的子视图的子视图。

      快速进入文本字段的代码:

      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
          }
        }
      }}
      

      上面代码的结果是当搜索栏文本框被触摸时没有键盘出现,只是一个红色的矩形。

      注意 - 归功于 Matt Neuburg 的“iOS8 编程:深入了解视图、视图控制器和框架(ISBN:978-1491908730)。准确地说是第 8 章。

      【讨论】:

      • 在 xcode 6.3.1 中工作。不想将其标记为正确,因为这感觉像是在给自己加分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 2017-04-26
      相关资源
      最近更新 更多