从扩展调用viewController中的函数?

问题描述 投票:0回答:1

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

    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。

ios swift uiviewcontroller extension-methods viewcontroller
1个回答
1
投票

它们是可以访问的,但在第一次自动完成时可能无法正常工作。只要调用 self.numberPadDone 从UITextField,或 text.numberPadDone,其中 text: UITextField 从viewController

© www.soinside.com 2019 - 2024. All rights reserved.