从 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
.
否则你可能会得到这个错误:
如果你这样做:
我有一个我想在按下按钮时调用的函数,但与我迄今为止所做的任何事情不同,我希望能够从几个 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
fromNSObject
.
否则你可能会得到这个错误:
如果你这样做: