首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >准备工作不像预期的那样有效

准备工作不像预期的那样有效
EN

Stack Overflow用户
提问于 2017-05-03 11:35:27
回答 3查看 716关注 0票数 2

我想使用performSegue转到另一个视图,如下所示

代码语言:javascript
复制
self.performSegue(withIdentifier: "successRegistration", sender: nil)

我想在我的目标视图中显示一个警告,所以我覆盖准备功能如下所示

代码语言:javascript
复制
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "successRegistration" {
            loginModel.alert(fromController: self)
            print("working")
        }
    }

但是准备函数似乎不起作用,因为working没有打印到控制台

我尝试删除我的prepare函数并更改我的performSegue,如下所示

代码语言:javascript
复制
self.performSegue(withIdentifier: "successRegistration", sender: self.loginModel.alert(fromController: self))

上面的行确实打印了警报,但它并没有带我到另一个视图。

在看到另一个视图后,我如何显示警报?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-03 12:00:26

在准备中在目标视图控制器上显示警报将导致:

代码语言:javascript
复制
"Attempt to present UIAlertController on SecondViewController whose view is not in the window hierarchy!"

要实现您想要的结果,只需在第二个视图控制器类中添加一个变量,并将其默认为false。

代码语言:javascript
复制
//In your second view controller
var shouldPresentAlertOnOpen: Bool = false

然后,可以在视图控制器的viewWillAppear方法中添加显示警报的逻辑,如下所示:

代码语言:javascript
复制
//Still in your second view controller
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if shouldPresentAlertOnOpen {
        //Present your alert here
        let alert = UIAlertController(title: "My Alert", message: "My awesome message", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }
}

现在回到您的第一个视图控制器,您可以将准备方法更新为:

代码语言:javascript
复制
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "successRegistration" {
        let destinationVC = segue.destination as! SecondViewController
        destinationVC.shouldPresentAlertOnOpen = true
    }
}

注意,SecondViewController应该更新为您的第二个视图控制器类。

我敢肯定你还有其他方法可以做到,这只是我的方法。

票数 4
EN

Stack Overflow用户

发布于 2017-05-03 11:47:04

检查一下这个:

代码语言:javascript
复制
self.performSegue(withIdentifier: "successRegistration", sender: self)
票数 0
EN

Stack Overflow用户

发布于 2017-05-03 11:56:39

你可以这样做:

代码语言:javascript
复制
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "successRegistration" {
            loginModel.alert(fromController: segue.destinationViewController)
            print("working")
        }
}

然后像这样表演独奏:

代码语言:javascript
复制
self.performSegue(withIdentifier: "successRegistration", sender: self)

如果您将一些值传递给destinationViewController并根据您要显示的值在下一个屏幕上显示警报,那就更好了。传递的值可以类似于shouldDisplayLoginAlertOnLoad等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43758928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档