从UIButton类的外部调用函数

我有一个函数,当按下button时,我想调用它,但是与我迄今为止所做的任何操作不同,我希望能够通过几个ViewController中的任何一个来访问它。 我不想在每个ViewController中重复相同的代码块。

我已经尝试定义我想调用ViewController类之外的函数,但我无法弄清楚为了达到目标而需要设置的目标。 通常使用self是因为函数是在类中定义的,但是如果函数在另一个文件中和/或类之外,你会做什么?

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

编辑:我将能够使用的另一个解决scheme是做这样的事情,并定义我要在创buildbutton的函数内部调用的函数,但我遇到了不知道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 } } 

提前致谢!

您通常会创build另一个类并在其中实现您的代码,然后创build(并保留)该类的一个实例并将其设置为目标。

你可以在这里find一个完整的教程。 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 :) ") } } 

关键是你应该从NSObject inheritance你的singleton class

如果没有,你可能会得到这个错误: 在这里输入图像说明

如果你这样做:

在这里输入图像说明

您将不得不传递包含该函数的类的引用。 例如,如果您正在使用单例模式:

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