Custom Keyboard tool bar in Swift

ODENZA
2 min readJul 28, 2022

In this article, I would like to show you how to custom ToolBar for keyboard using UIToolBar in Swift.

I will create custom class for ToolBar KeyboardToolBar: UIToolBar .

class KeyboardToolBar: UIToolbar {  lazy var flexibleSpace: UIBarButtonItem = {
let bar = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
return bar
}()
lazy var titleLabel: UILabel = {
let label = UILabel(frame: CGRect.zero) label.translatesAutoresizingMaskIntoConstraints = false
label.tintColor = .gray
label.textAlignment = .center
return label
}()
lazy var doneButtonItem: UIBarButtonItem = {
let button = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(doneButtonClicked))
return button
}()
lazy var doneButton: UIButton = {
let button = UIButton()
button.setTitle("Done", for: .normal)
button.setTitleColor(.systemBlue, for: .normal)
button.addTarget(self, action: #selector(doneButtonClicked), for: .touchUpInside)
return button
}()
private var title: String?
private var onDoneButtonClicked: () -> Void = {}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
// MARK: - User Interaction @objc func doneButtonClicked() {
onDoneButtonClicked()
}
// MARK: - Helper func configure(title: String?, onDoneButtonClicked: @escaping () -> Void) {
self.title = title
self.onDoneButtonClicked = onDoneButtonClicked
setupView()
}
private func setupView() {
titleLabel.text = title
let labelItem = UIBarButtonItem(customView: titleLabel)
self.sizeToFit()
self.setItems([flexibleSpace, labelItem, flexibleSpace, doneButtonItem], animated: true)
}
}

And, Implement this class on your ViewController.

@IBOutlet weak var textField: UITextField!let keyboardToolBar = KeyboardToolBar()override func viewDidLoad() {
super.viewDidLoad()
keyboardToolBar.configure(title: "Your title", onDoneButtonClicked: {
self.textField.resignFirstResponder()
})
textField.inputAccessoryView = keyboardToolBar
}

--

--