TextView 和 TextField 的单一扩展以添加工具栏
Single extension for TextView and TextField to add a toolBar
我想创建一个扩展来在键盘上为 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, width: screenWidth, height: 44.0))
toolBar.setItems(items, animated: false)
self.inputAccessoryView = toolBar
}
}
但是在 2 个不同的扩展中具有完全相同的功能是很烦人的。
我尝试像这个问题中那样扩展 UIView 但是我在 inputAccessoryView 中遇到了错误,因为它只是一个 get 属性.
如何分解这两个相同的函数?
也许这会对你有所帮助:
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 可以向 UITextInput 确认。
protocol KeyboardToolbarCompatible: UITextInput { ... }
我想创建一个扩展来在键盘上为 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, width: screenWidth, height: 44.0))
toolBar.setItems(items, animated: false)
self.inputAccessoryView = toolBar
}
}
但是在 2 个不同的扩展中具有完全相同的功能是很烦人的。
我尝试像这个问题中那样扩展 UIView
如何分解这两个相同的函数?
也许这会对你有所帮助:
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 可以向 UITextInput 确认。
protocol KeyboardToolbarCompatible: UITextInput { ... }