Очень простое и понятное расширение для UITextField и UITextView, с которым можно легко добавить панель над клавиатурой:
import UIKit
extension UITextField {
/// Adds a toolbar on top of the keyboard with a button to hide the keyboard for the UITextView
func addDoneButton(_ buttons: [UIBarButtonItem]) {
let toolBar = UIToolbar()
toolBar.sizeToFit()
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
var toolBarButtons = [flexibleSpace]
toolBarButtons.append(contentsOf: buttons)
toolBar.items = toolBarButtons
self.inputAccessoryView = toolBar
}
}
flexibleSpace в данном случае занимает все свободное место, и так как он первый в массиве - стоит он слева, и нужные нам кнопки располагаются справа.
Использовать его так же просто. Сначала создаём кнопку UIBarButtonItem(), например, "Done" для того, чтобы спрятать клавиатуру:
let barButton = UIBarButtonItem(barButtonSystemItem: .done, target: textField, action: #selector(resignFirstResponder))
textField.addDoneButton([barButton])
При желании можно добавить массив из сразу нескольких кнопок. Результат вполне предсказуемый: