Панель над клавиатурой UIKit

Очень простое и понятное расширение для 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])

При желании можно добавить массив из сразу нескольких кнопок. Результат вполне предсказуемый:

June 1, 2020