我正在使用这个扩展来定制我的键盘和额外的选项。
extension UITextField {
func addNumericAccessory(addPlusMinus: Bool) {
let numberToolbar = UIToolbar()
numberToolbar.barStyle = UIBarStyle.default
var accessories : [UIBarButtonItem] = []
if addPlusMinus {
accessories.append(UIBarButtonItem(title: "+/-", style: UIBarButtonItem.Style.plain, target: self, action: #selector(plusMinusPressed)))
accessories.append(UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)) //add padding after
}
accessories.append(UIBarButtonItem(title: "Clear", style: UIBarButtonItem.Style.plain, target: self, action: #selector(numberPadClear)))
accessories.append(UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)) //add padding space
accessories.append(UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.plain, target: self, action: #selector(numberPadDone)))
numberToolbar.items = accessories
numberToolbar.sizeToFit()
inputAccessoryView = numberToolbar
}
@objc func numberPadDone() {
self.resignFirstResponder()
}
@objc func numberPadClear() {
self.text = ""
}
@objc func plusMinusPressed() {
guard let currentText = self.text else {
return
}
if currentText.hasPrefix("-") {
let offsetIndex = currentText.index(currentText.startIndex, offsetBy: 1)
let substring = currentText[offsetIndex...] //remove first character
self.text = String(substring)
}
else {
self.text = "-" + currentText
}
}
}
我怎样才能让numberPadDone函数在viewController中调用一个函数?
我需要更新其他TextFields,但我无法在扩展中访问它们。有没有办法调用我的viewController中的updateTextFields()?
编辑,请问有什么方法可以调用我的viewController中的updateTextFields()?
这个函数在我的viewController中https:/i.stack.imgur.comO0kpS.png。
从分机调用函数https:/i.stack.imgur.comaywzP.png。
将@objc func numberPadDone()移动到viewController中。https:/i.stack.imgur.com5di8d.png。
总而言之,我需要这个扩展来给我的键盘添加减号,但也需要调用viewController中的函数。我遇到的问题是,除了这个扩展的TextField之外,我无法通过self访问我的viewController。
它们是可以访问的,但在第一次自动完成时可能无法正常工作。只要调用 self.numberPadDone
从UITextField,或 text.numberPadDone
,其中 text: UITextField
从viewController