【发布时间】:2020-05-15 07:36:22
【问题描述】:
我正在使用此扩展程序来自定义我的键盘,并提供额外的选项。
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中 https://i.stack.imgur.com/O0kpS.png
从扩展调用函数 https://i.stack.imgur.com/aywzP.png
将 @objc func numberPadDone() 移动到 viewController https://i.stack.imgur.com/5di8d.png
总而言之,我需要这个扩展来为我的键盘添加减号,但还需要在我的 viewController 中调用函数。我遇到的问题是我无法访问我的 viewController 除了这个扩展是通过 self 的 TextField。
【问题讨论】:
-
那么您面临什么问题?在控制器中访问它们有什么错误吗?
-
它们应该可以访问
-
self.text 可访问,但脚本中的自定义函数无法识别。您在示例中看不到的是 self.updateTextFields(),它是我的 viewController 中的一个函数。我得到一个 updateTextField() 无法识别的错误。
-
可以显示显示你的viewController吗?和错误屏幕截图?
-
用截图更新了我的问题
标签: swift