• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何从委托(delegate)方法启动 UIAlertController?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 21:47:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的代码非常基础。我有 2 个 View Controller 。在名为“FirstScreen”的第一个 viewController 上有一个按钮,通过模态 segue 将我带到第二个屏幕,那里还有一个按钮。 “SecondScreen”有一个带有 1 方法的协议(protocol),“FirstScreen”符合该协议(protocol)。所以基本上我试图从该方法调用 UIAlertController,同时按下“SecondScreen”的按钮。结果我得到:

"Warning: Attempt to present.....on....whose view is not in the window hierarchy!

我知道我可以在我的 Storyboard 中嵌入一个导航 Controller 并且警报会起作用,但对我来说不是这样。我也想以这种方式调用警报,因为需要知道 CLAuthorizationStatus

So maybe is there any way of getting the status directly from the "SecondScreen" ?

import UIKit
import CoreLocation

class FirstScreen: UIViewController {

    @IBAction func firstTapped(_ sender: UIButton) {
        let selectionVC = storyboard?.instantiateViewController(withIdentifier: "secondVC") as! SecondScreen
        present(selectionVC, animated: true, completion: nil)
        selectionVC.delegate = self
    }
}

extension FirstScreen: LocationPermissionDelegate {

    func checkLocationStatus() {

        let status = CLLocationManager.authorizationStatus()
        if status == CLAuthorizationStatus.notDetermined {

            let alert = UIAlertController(title: "Just a message", message: "HEYYY!", preferredStyle: .alert)
            let action = UIAlertAction(title: "Dismiss", style: .default, handler: nil)
            alert.addAction(action)
            present(alert, animated: true)
        }
    }
}

import Foundation
import UIKit

protocol LocationPermissionDelegate {
    func checkLocationStatus()
}

class SecondScreen: UIViewController {

    var delegate: LocationPermissionDelegate?

    @IBAction func secondTapped(_ sender: UIButton) {

        delegate?.checkLocationStatus()  
    }
}



Best Answer-推荐答案


firstvc目前正在展示

present(selectionVC, animated: true, completion: nil)

所以你不能在这里显示警报

present(alert, animated: true)

移动这个

func checkLocationStatus() {

    let status = CLLocationManager.authorizationStatus()
    if status == CLAuthorizationStatus.notDetermined {

        let alert = UIAlertController(title: "Just a message", message: "HEYYY!", preferredStyle: .alert)
        let action = UIAlertAction(title: "Dismiss", style: .default, handler: nil)
        alert.addAction(action)
        present(alert, animated: true)
    }
}

到第二个vc,在那里做演示

关于ios - 如何从委托(delegate)方法启动 UIAlertController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54275477/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap