首次单击button时传递的数据不正确

敬礼,

我的问题如下,我有一个应用程序,我正在其中包含两个视图。 第一个只有2个button标有“幻灯片放映一”和“幻灯片放映二”。

当我点击第一个button时,它显示第二个幻灯片的信息(由于我的至高无上的新手),我select通过布尔值select哪个幻灯片,如下所示:

var button : Bool = false; 

然后:

 @IBAction func slideShowOne() { button = true; } @IBAction func slideShowTwo() { print("clicked button 2"); button = false; } 

最后在prepareForSegue:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let passedPic = segue.destination as! ViewControllerTwo; if(button == true) { print(button); passedPic.picsChosen = sLS1; } if(button == false) { print(button); passedPic.picsChosen = sLS2; } } 

只有方法才能显示正确的信息是通过点击说button1 btn1幻灯片,返回,然后再次点击button1。 这是为什么呢,这跟快速处理函数调用有什么关系?

旁白:迅速的知识现在是一个星期的总计。

编辑:得到它的工作,非常感谢。 现在有一个简单的问题,在这个时候,我的两个IBA都是空的,但是因为他们有附加的inheritance关系,所以是最好的方法,或者使它们变得有意义,或者仍然能够继续; 我认为准备function是绝对必须的,否则就没有办法(我知道)将所需的数据发送给我的第二个VC。

 @IBAction func slideShowOne() { //self.performSegue(withIdentifier: "slideOne", sender: self); } @IBAction func slideShowTwo() { //self.performSegue(withIdentifier: "slideTwo", sender: self); } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let passedPic = segue.destination as! ViewControllerTwo; if(segue.identifier == "slideOne") { passedPic.picsChosen = sLS1; } else { passedPic.picsChosen = sLS2; } } 

尝试连接视图控制器通过故事板视图控制器 – 相同的CTRL拖动,但整个视图控制器到其他。

给这个segue标识符 – >select标识符,并在前面的选项卡上给它标识符。

之后,在其中一个button,例如:

 @IBAction func slideShowOne() { button = true; self.performSegue(withIdentifier: "toTheOtherVC", sender: self) } 

你会有所需的行为。

原因是: override func prepare(for segue: UIStoryboardSegue, sender: Any?)总是先执行。 所以实际的工作stream程如下:

– > 1)初始化第一个视图

– > 2) var button = false

– > 3)用户点击btn1

– > 4) func prepare被调用

– > 5)显示第二个视图var button仍然是false,这就是为什么你得到不正确的回应)

– > 6) func slideShowOne()被调用(用户已经在第二个视图)

– > 7) var button = truefunc slideShowOne()导致func slideShowOne() (用户已经在第二个视图)

– > 8)用户回去

– > 9)用户再次点击btn1

– > 10) func prepare被称为

– > 11)显示第二个视图(用户得到正确的响应,因为var button值已经在步骤7中改变了)

如果您有任何其他问题,请告诉我。 玩的开心。 :)