繁体   English   中英

在 swift 中,当不同的按钮通向同一个 ViewController 时,我如何知道按下了哪个按钮?

[英]How do I know in swift which button was pressed when different buttons lead to the same ViewController?

我有四个按钮,它们都通向相同的视图 controller。 我需要知道按下了哪个按钮,因为每个按钮的视图 controller 设置略有不同。 我尝试了以下操作: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
    }

之后打开的视图 controller

// to get functions from SecondViewController
var second = SecondViewController()

let index = second.getIndex()
print(index)

不幸的是,它总是打印零。 我猜是因为我在开始时将索引设置为 0,但我不明白为什么按下按钮时值不更新。

我能做些什么?

我猜你正在使用 segue,所以你的 segue 在你的 IBAction 可以更新你的索引值之前执行。 这里有一个类似的问题和解决方案

因此,要解决此问题,请为您的 segue 提供一个标识符,并从您的 IBAction 方法中调用performSegueWithIdentifier

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)
}

如果我理解正确,你肯定会得到索引为 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 中,对吧?

然后你在另一个视图中调用下面的代码 controller (也许是 FirstViewController)

// to get functions from SecondViewController
var second = SecondViewController()

let index = second.getIndex()
print(index)

因此,您可以在 SecondViewController 刚刚初始化之后从它中获取索引,并且您无法在second.getIndex()之前单击按钮并更改索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM