iosswiftkeyboarduisearchbarinputview

UIsearchBar input Keyboard Type


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.


Solution

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