首次单击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 = true由func slideShowOne()
导致func slideShowOne()
(用户已经在第二个视图)
– > 8)用户回去
– > 9)用户再次点击btn1
– > 10) func prepare
被称为
– > 11)显示第二个视图(用户得到正确的响应,因为var button
值已经在步骤7中改变了)
如果您有任何其他问题,请告诉我。 玩的开心。 :)