从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", ...