我有一个按下按钮时要调用的功能,但与我迄今为止所做的任何事情不同,我希望能够从几个ViewControllers中找到它。我不想在每个ViewController中复制相同的代码块。
我已经尝试定义我想在ViewController类之外调用的函数,但我无法弄清楚我需要设置目标才能达到它。通常使用self
因为函数是在类中定义的,但是如果函数在另一个文件中和/或类之外,你会怎么做?
button.addTarget(???, action: "myFunction:", forControlEvents: UIControlEvents.TouchUpInside)
编辑:我能够使用的另一个解决方案是做这样的事情并定义我想在创建按钮的函数内部调用的函数,但我遇到了同样的问题,不知道是什么{{ 1}}需要达到它。
target
提前致谢!
答案 0 :(得分:6)
您可以在这里找到完整的教程。 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 :) ")
}
}
关键是您应该从
singleton class
继承NSObject
。
如果你这样做:
答案 1 :(得分:3)
您通常会创建另一个类并在那里实现您的代码,然后创建(并保留)该类的实例并将其设置为目标。
答案 2 :(得分:2)
您必须传递包含该函数的类的引用。例如,如果您使用的是单例模式:
button.addTarget(FunctionEngine.sharedInstance, action: "buttonFunction", ...