当不同的按钮导致相同的 ViewController 时,我如何知道在 swift 中按下了哪个按钮?
How do I know in swift which button was pressed when different buttons lead to the same ViewController?
我有四个按钮,它们都指向同一个视图控制器。我需要知道按下了哪个按钮,因为每个按钮的视图控制器设置略有不同。
我尝试了以下内容:
ViewController(称为 "SecondViewController")其中一个按钮被按下
var index = 0
@IBAction func Button1(_ sender: UIButton) {
index = 1
}
@IBAction func Button2(_ sender: UIButton) {
index = 2
}
@IBAction func Button3(_ sender: UIButton) {
index = 3
}
@IBAction func Button4(_ sender: UIButton) {
index = 4
}
func getIndex() -> Int{
return index
}
之后打开的视图控制器
// to get functions from SecondViewController
var second = SecondViewController()
let index = second.getIndex()
print(index)
不幸的是,它总是打印出零。我猜是因为一开始我将索引设置为 0,但我不明白为什么按下按钮时值不更新。
我能做什么?
我猜你正在使用 segues,所以你的 segues 在你的 IBAction 可以更新你的索引值之前执行。有一个类似的问题和解决方案
因此,要解决此问题,请为您的 segue 提供一个标识符,并从您的 IBAction 方法中调用 performSegueWithIdentifier
。
如果我没理解错的话,你得到的index肯定是0。
var index = 0
@IBAction func Button1(_ sender: UIButton) {
index = 1
}
@IBAction func Button2(_ sender: UIButton) {
index = 2
}
@IBAction func Button3(_ sender: UIButton) {
index = 3
}
@IBAction func Button4(_ sender: UIButton) {
index = 4
}
func getIndex() -> Int{
return index
}
上面的代码是在SecondViewController里面吧?
然后在另一个视图控制器(可能是 FirstViewController)中调用下面的代码
// to get functions from SecondViewController
var second = SecondViewController()
let index = second.getIndex()
print(index)
所以您在 SecondViewController 刚刚初始化后就可以从中获取索引,并且您无法在 second.getIndex()
之前单击按钮和更改索引。
SecondViewController(前一个包含按钮)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let firstViewController = segue.destination as? FirstViewController {
firstViewController.index = self.index
}
}
FirstViewController(单击按钮后应显示一个)
var index: Int?
override func viewDidLoad() {
super.viewDidLoad()
print(index)
}
我有四个按钮,它们都指向同一个视图控制器。我需要知道按下了哪个按钮,因为每个按钮的视图控制器设置略有不同。 我尝试了以下内容: ViewController(称为 "SecondViewController")其中一个按钮被按下
var index = 0
@IBAction func Button1(_ sender: UIButton) {
index = 1
}
@IBAction func Button2(_ sender: UIButton) {
index = 2
}
@IBAction func Button3(_ sender: UIButton) {
index = 3
}
@IBAction func Button4(_ sender: UIButton) {
index = 4
}
func getIndex() -> Int{
return index
}
之后打开的视图控制器
// to get functions from SecondViewController
var second = SecondViewController()
let index = second.getIndex()
print(index)
不幸的是,它总是打印出零。我猜是因为一开始我将索引设置为 0,但我不明白为什么按下按钮时值不更新。
我能做什么?
我猜你正在使用 segues,所以你的 segues 在你的 IBAction 可以更新你的索引值之前执行。有一个类似的问题和解决方案
因此,要解决此问题,请为您的 segue 提供一个标识符,并从您的 IBAction 方法中调用 performSegueWithIdentifier
。
如果我没理解错的话,你得到的index肯定是0。
var index = 0
@IBAction func Button1(_ sender: UIButton) {
index = 1
}
@IBAction func Button2(_ sender: UIButton) {
index = 2
}
@IBAction func Button3(_ sender: UIButton) {
index = 3
}
@IBAction func Button4(_ sender: UIButton) {
index = 4
}
func getIndex() -> Int{
return index
}
上面的代码是在SecondViewController里面吧?
然后在另一个视图控制器(可能是 FirstViewController)中调用下面的代码
// to get functions from SecondViewController
var second = SecondViewController()
let index = second.getIndex()
print(index)
所以您在 SecondViewController 刚刚初始化后就可以从中获取索引,并且您无法在 second.getIndex()
之前单击按钮和更改索引。
SecondViewController(前一个包含按钮)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let firstViewController = segue.destination as? FirstViewController {
firstViewController.index = self.index
}
}
FirstViewController(单击按钮后应显示一个)
var index: Int?
override func viewDidLoad() {
super.viewDidLoad()
print(index)
}