Swift 从扩展调用viewController中的函数?

Swift 从扩展调用viewController中的函数?,swift,Swift,我用这个扩展来定制我的键盘和额外的选项 extension UITextField { func addNumericAccessory(addPlusMinus: Bool) { let numberToolbar = UIToolbar() numberToolbar.barStyle = UIBarStyle.default var accessories : [UIBarButtonItem] = [] if addPlusMinus {

我用这个扩展来定制我的键盘和额外的选项

    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中的函数

我需要更新其他文本字段,但无法在扩展中访问它们。有没有办法调用我的viewController中的updateTextFields()呢

编辑:

此函数位于我的viewController中

从扩展调用函数

正在将@objc func numberPadDone()移动到viewController


总而言之,我需要这个扩展将负号添加到键盘上,但也需要调用viewController中的函数。我遇到的问题是,除了文本字段之外,我无法访问我的viewController。此扩展是通过self进行的。

它们可以访问,但第一次自动完成可能无法正常工作。只需从UITextField调用
self.numberPadDone
,或从viewController调用
text.numberPadDone
,其中
text:UITextField
可以访问,但第一次自动完成可能无法正常工作。只需从UITextField调用
self.numberPadDone
,或从viewController调用
text.numberPadDone
,其中
text:UITextField
,那么您面临什么问题呢?在控制器中访问它们时有错误吗?它们应该是可访问的。文本是可访问的,但脚本中的自定义函数显示为未识别。在这个示例中,您看不到self.updateTextFields(),它是我的viewController中的一个函数。我得到一个错误,updateTextField()无法识别。可以显示您的viewController吗?错误屏幕截图?用屏幕截图更新了我的问题您面临什么问题?在控制器中访问它们时有错误吗?它们应该是可访问的。文本是可访问的,但脚本中的自定义函数显示为未识别。在这个示例中,您看不到self.updateTextFields(),它是我的viewController中的一个函数。我得到一个错误,updateTextField()无法识别。可以显示您的viewController吗?错误屏幕截图?用屏幕截图更新了我的问题我是否应该将func numberPadDone移动到我的视图控制器?因为目前它在扩展中。我想从中调用我自己的函数,这取决于你的任务。如果每个UITextField必须包含一些附加功能,最好扩展UITextField。如果您需要在某一点上计算某些内容-最好将其移动到代码的更高部分(UIViewContoler、Model、ViewModel或任何其他,取决于“选择体系结构”),我是否应该将func numberPadDone移动到视图控制器?因为目前它在扩展中。我想从中调用我自己的函数,这取决于你的任务。如果每个UITextField必须包含一些附加功能,最好扩展UITextField。如果您需要在某一点上计算某些内容,最好将其移动到代码的较高部分(UIViewContoler、Model、ViewModel或任何其他,取决于选择的体系结构)