繁体   English   中英

如何从 UIAlert 转出并传递信息

[英]How to segue from UIAlert and pass information

我对 Swift 和编程很陌生。 我正在制作一个测验应用程序,我想在我的测验视图控制器和一个新的视图控制器之间传输信息。 我已经成功地做到了这一点,但现在我想使用UIAlertView来获取信息。

我遇到的问题是,当它转换到新的视图控制器时,没有填充数组。 当我使用普通的 UI 按钮时,我让它工作了,但随着 UI 警报它似乎不起作用。

用户提交答案

当这个按钮被按下时,程序会检查用户是否已经回答了所有的问题,然后创建一个UIAlertView - 如果用户按下 Yes 那么它应该转到下一个控制器并传递所需的信息,但它没有。

目标视图控制器中的数组没有问题,因为在我决定进行此切换之前,它一直工作正常。

@IBAction func submitAll(sender: UIButton) {

    let hasAnsweredAllQuestions = questions.reduce(true) { (x, q) in x && (q.usersAnswer != nil) }

    println("has user answered all questions?: \(hasAnsweredAllQuestions)")

    if hasAnsweredAllQuestions == true {
            let alert: UIAlertView = UIAlertView()
            alert.delegate = self
            alert.title = "Submit Answers?"
            alert.message = "If you click yes, your answers will be submitted. If you aren`t finished with the exam press continue."
            alert.addButtonWithTitle("Yes")
            alert.addButtonWithTitle("Continue")
            alert.show()
            println(userAnswers)

    } else if hasAnsweredAllQuestions == false {
        let alert = UIAlertView()
        alert.title = "Hey, Wait!"
        alert.message = "You have not answered all questions. Please finish the quiz."
        alert.addButtonWithTitle("Ok")
        alert.show()
    }
}

开关/外壳功能

在这里,程序将所有用户的响应和正确的答案附加到一个新数组中,并让它们准备好发送到下一个视图控制器。

作为一种调试模式,我创建了一个简单的 if 语句来确保数组被填充。

此处程序进入下一个视图控制器,但未填充目标视图控制器中的数组。 当我只使用一个简单的UIButton而不是警报时,它最初是有效的。

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){

    switch buttonIndex{
    case 0: // Yes

        for (index, _) in enumerate(questions) {
            userAnswers.append(questions[index].usersAnswer!)
            correctAnswers.append(questions[index].answer!)
            println("this is working")
        }

        if userAnswers.count == 4 {
            self.performSegueWithIdentifier("segue.push.alert", sender: self)

            func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

                if(segue.identifier == "segue.push.alert") {
                    var answerSummary = segue.destinationViewController as! ResultsViewController

                    answerSummary.correctAnswersResults = correctAnswers
                    answerSummary.userAnswersResults = userAnswers
                }
            }
        }

        break;
    default: // Continue
        NSLog("Default");
        break;}
}

您的prepareForSegue(_:sender:)方法嵌入在您的alertView(_:clickedButtonAtIndex:)方法中。

虽然这在 Swift 中是合法的,但 UIKit 不会调用这个方法。 它需要是您的视图控制器子类中的一个方法(如您的alertView(_:clickedButtonAtIndex:)方法)。

您可能需要查看一些有关 Xcode 调试的文档; 我认为在方法中设置断点会告诉你它从未被调用过。

暂无
暂无

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

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