首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIAlertController面板在用户可以响应之前消失

UIAlertController面板在用户可以响应之前消失
EN

Stack Overflow用户
提问于 2017-01-14 06:44:44
回答 3查看 1.6K关注 0票数 3

我使用alert控制器在catch块中显示错误。然而,在它自行消失之前,用户几乎看不到它。我做错了什么?这是我的代码。

代码语言:javascript
运行
复制
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    if viewController is CancelInspectionViewController {
        persistentContainer.viewContext.rollback()
        self.dismiss(animated: true, completion: nil)
        return false
    } else if viewController is SubmitInspectionViewController {
        do {
            try persistentContainer.viewContext.save()
            self.dismiss(animated: true, completion: nil)
        } catch {
            _alertController = UIAlertController(title: "Error Saving", message: error.localizedDescription, preferredStyle: .alert)
            let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
            _alertController.addAction(defaultAction)
            present(_alertController, animated:true, completion: {
                self.dismiss(animated: true, completion: nil)
            })
        }
EN

回答 3

Stack Overflow用户

发布于 2017-01-14 06:50:25

您的问题是在错误的位置调用了self.dismiss(animated: true, completion: nil)。一旦您展示了_alertController,您就会调用它。一旦显示了警报控制器,您实际上就不需要调用此函数。UIAlertAction会处理将其驳回。

票数 2
EN

Stack Overflow用户

发布于 2017-01-14 08:02:46

我想通了!我误解了alert控制器是如何工作的。我以为它会阻塞线程,直到用户响应;但事实并非如此。因此,此函数后面的代码将关闭警告面板。

工作代码是在呈现警报后返回false。

代码语言:javascript
运行
复制
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    if viewController is CancelInspectionViewController {
        persistentContainer.viewContext.rollback()
        self.dismiss(animated: true, completion: nil)
        return false
    } else if viewController is SubmitInspectionViewController {
        do {
            try persistentContainer.viewContext.save()
            self.dismiss(animated: true, completion: nil)
        } catch {
            let alertController = UIAlertController(title: "Error Saving", message: error.localizedDescription, preferredStyle: .alert)
            let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
            alertController.addAction(defaultAction)
            present(alertController, animated:true, completion: nil)
            return false
        }
票数 1
EN

Stack Overflow用户

发布于 2017-01-14 06:48:18

删除self.dismiss(动画: true,完成: nil)

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

https://stackoverflow.com/questions/41644622

复制
相关文章

相似问题

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