首次点击按钮

时间:2017-01-17 19:55:49

标签: ios swift

致敬,

我的问题如下,我有一个我正在处理的应用程序,其中包含两个视图。第一个按钮标有" Slide Show One"和" Slide Show Two"。

当我点击第一个按钮时,它显示第二个幻灯片的信息(由于我的最高新手),我选择通过布尔选择哪个幻灯片,如下所示:

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

只有让它显示正确信息的方法是点击说按钮1进行btn1幻灯片放映,返回,然后再次点击按钮1。为什么这样,它与swift如何处理函数调用有什么关系?

除此之外:快速的知识现在总共为期一周。

编辑:让它工作,非常感谢。现在一个简单的问题,在这个时候我的两个IBActions是空的,但是由于它们附加了segue,因此它们是使它们有意义或者可能仍然能够发挥作用的最好方法;我假设prepare函数是绝对必须的,否则没有办法(我知道),将所需的数据发送到我的第二个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;
        }

    }

2 个答案:

答案 0 :(得分:1)

尝试通过情节提示连接视图控制器到视图控制器 - 同样的ctrl拖动但整个视图控制器到其他。

给出该segue标识符 - >选择标识符并在第四个选项卡上给它识别。

之后在你的一个按钮中,例如:

order-by-date(){
    ls -A1 | grep -E '( ... magic pattern here ... )' | while read -r line; do
        YEAR="$(echo $line....)
        MONTH="$(echo $line....)
        DAY="$(echo $line....)

        # ... and in a perfect world, get times IF they exist...
        HOUR="$(echo $line....)
        MINUTE="$(echo $line....)
        SECOND="$(echo $line....)
    done
}

你会有所期望的行为。

答案 1 :(得分:1)

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

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

- > 2) var button = false

- > 3)用户点击btn1

- > 4)func prepare被称为

- > 5)显示第二个视图(此时var button仍为假,这就是您收到错误答案的原因)

- > 6)调用func slideShowOne()(用户已在第二个视图中)

- > 7)由func slideShowOne()引起的 var button = true (用户已在第二个视图中)

- > 8)用户返回

- > 9)用户再次点击btn1

- > 10)func prepare被称为

- > 11)显示第二个视图(由于var button的值已在步骤7中更改,用户得到正确答案)

如果您有任何其他问题,请与我们联系。玩得开心。 :)