从 UIButton 调用 class 之外的函数

Call function outside of class from UIButton

我有一个我想在按下按钮时调用的函数,但与我迄今为止所做的任何事情不同,我希望能够从几个 ViewControllers。我不想在每个 ViewController.

中重复相同的代码块

我已经尝试定义我想在 ViewController 类之外调用的函数,但我无法弄清楚我需要将目标设置为什么才能达到它。通常使用 self 是因为函数是在类中定义的,但是如果函数在另一个文件中 and/or 在类之外怎么办?

button.addTarget(???, action: "myFunction:", forControlEvents: UIControlEvents.TouchUpInside)

编辑:我可以使用的另一种解决方案是做这样的事情,并在创建按钮的函数中定义我想调用的函数,但我遇到了同样的问题,不知道target 需要达到它。

class ViewController {
    // Main code here
}

func makeButton() {
   //  Code to make button here
   button.addTarget(???, action: "buttonPressed",...)

   func buttonPressed() {
       // Code that runs when the button is pressed goes here
   }
}

提前致谢!

您通常会创建另一个 class 并在那里实现您的代码,然后创建(并保留)class 的实例并将其设置为目标。

您必须传递包含该函数的 class 的引用。例如,如果您使用单例模式:

button.addTarget(FunctionEngine.sharedInstance, action: "buttonFunction", ...

您可以在这里找到完整的教程。 https://github.com/fatihyildizhan/SingletonFunctionForAddTarget

如果您不想下载它:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var btnGotoVacation: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        btnGotoVacation.addTarget(MySingletonClass.sharedInstance, action: Selector("visitBodrum:"), forControlEvents:.TouchUpInside)
    }
}

class MySingletonClass:NSObject {
    static let sharedInstance = MySingletonClass()

    func visitBodrum(sender:AnyObject) {
        print("don't forget to visit yalikavak :) ")
    }
}

The key point is that you should inherit your singleton class from NSObject.

否则你可能会得到这个错误:

如果你这样做: