Ios TextView和TextField的单一扩展,用于添加工具栏
我想创建一个扩展,在键盘上为TextView和TextField添加一个工具栏 现在我在TextView和TextField上都这样做:Ios TextView和TextField的单一扩展,用于添加工具栏,ios,swift,uitextfield,uitextview,Ios,Swift,Uitextfield,Uitextview,我想创建一个扩展,在键盘上为TextView和TextField添加一个工具栏 现在我在TextView和TextField上都这样做: extension UITextView { func setKeyboardToolBar(items: [UIBarButtonItem]) { let screenWidth = UIScreen.main.bounds.width let toolBar = UIToolbar(frame: CGRect(x: 0.0, y: 0.0,
extension UITextView {
func setKeyboardToolBar(items: [UIBarButtonItem]) {
let screenWidth = UIScreen.main.bounds.width
let toolBar = UIToolbar(frame: CGRect(x: 0.0, y: 0.0, width: screenWidth, height: 44.0))
toolBar.setItems(items, animated: false)
self.inputAccessoryView = toolBar
}
}
但是,在两个不同的扩展中使用完全相同的函数是很烦人的
我试图像在这个问题中那样扩展UIView,但inputAccessoryView出现错误,因为它是一个get only属性
我如何分解这两个相同的函数?也许这会帮助您:
extension UITextField: KeyboardToolbarCompatible {}
extension UITextView: KeyboardToolbarCompatible {}
protocol KeyboardToolbarCompatible: AnyObject {
func setKeyboardToolBar(items: [UIBarButtonItem])
var inputAccessoryView: UIView? { get set }
}
extension KeyboardToolbarCompatible {
func setKeyboardToolBar(items: [UIBarButtonItem]) {
let screenWidth = UIScreen.main.bounds.width
let toolBar = UIToolbar(frame: CGRect(x: 0.0, y: 0.0, width: screenWidth, height: 44.0))
toolBar.setItems(items, animated: false)
self.inputAccessoryView = toolBar
}
}
如果仅TextView和TextField需要此选项,则KeyboardToolbarCompatible可以确认输入
protocol KeyboardToolbarCompatible: UITextInput { ... }