UIsearchBar input Keyboard Type

﹥>﹥吖頭↗ 提交于 2019-12-08 12:55:41

问题


Does anyone know how to change the input keyboard type for the searchbar? The code

searchController.searchBar.inputView = input

doesn't work like in a text field. I have read that the subview of the searchBar is a textfield but I don't know how to access that subview to change the inputView.


回答1:


I think you want to display different keyboard than standard, Make sure you have assign delegate to keyboard.

class ViewController: UIViewController, UISearchBarDelegate, KeyboardDelegate
{
    @IBOutlet weak var searchBar: UISearchBar!

    override func viewDidLoad() {
 let keyboardView = KeyboardView(frame: CGRect(x: 0, y: 0, width: 375, height: 165))
        keyboardView.delegate = self
        let searchTextField = searchBar.value(forKey: "_searchField") as! UITextField
        searchTextField.inputView = keyboardView
    }

    func keyWasTapped(text: String) {
        searchBar.text = text
    }
}

My Custom Keyboard Class

protocol KeyboardDelegate: class {
    func keyWasTapped(text: String)
}

class KeyboardView: UIView {


    // This variable will be set as the view controller so that
    // the keyboard can send messages to the view controller.
    weak var delegate: KeyboardDelegate?


    // MARK:- keyboard initialization
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        initializeSubviews()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        initializeSubviews()
    }

    func initializeSubviews() {
        let xibFileName = "KeyboardView" // xib extention not included
        let view = Bundle.main.loadNibNamed(xibFileName, owner: self, options: nil)?[0] as! UIView
        self.addSubview(view)
        view.frame = self.bounds
    }

    // MARK:- Button actions from .xib file    
    @IBAction func keyTapped(_ sender: UIButton) {
        // When a button is tapped, send that information to the
        // delegate (ie, the view controller)
        self.delegate?.keyWasTapped(text: sender.titleLabel!.text!) // could alternatively send a tag value
    }

}



回答2:


You have to access like this :

if let searchBarTxtField = searchController.searchBar.valueForKey("_searchField") as UITextField {
    searchBarTxtField.inputView = input
}


来源:https://stackoverflow.com/questions/46781604/uisearchbar-input-keyboard-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!