如何将布尔值从应用程序委托传输到视图控制器?

Posted

技术标签:

【中文标题】如何将布尔值从应用程序委托传输到视图控制器?【英文标题】:How to transfer a boolean from app delegate to a viewcontroller? 【发布时间】:2018-11-02 21:55:37 【问题描述】:

我目前正在尝试将变量从应用程序委托传输到 ViewController。我找到的大多数指南都在 Objective-c 中,我没有将代码转换为 swift 的技能。有人可以帮我找到一种方法来做到这一点。

func applicationDidBecomeActive(_ application: UIApplication) 
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
        var isIpad: Bool!
        if UIDevice.current.userInterfaceIdiom == .pad 
            isIpad = true
            print("iPad")

        else
            print("not iPad")
            isIpad = false
        

    

【问题讨论】:

发布代码.. 只有我不知道从哪里开始的代码 1.你为什么要检查 iPad 和 iPhone?根据视图大小而不是设备类型做出决定。 2. 为什么在applicationDidBecomeActive做这个?每次应用程序激活时它都不会改变。 3. 为什么要为此设置一个变量,为什么在应用程序委托中?只需在您需要的地方进行检查(但请参阅第 1 点)。 谢谢,但我不是在寻找替代方案。我对我正在尝试做的事情很好,因为它可以完成工作。我的应用将根据设备类型转到不同的视图控制器。 “我对我正在尝试做的事情很好,因为它可以完成工作。”您还没有明确说明您要完成的工作。你说你想将一个布尔值从你的应用程序委托传递给一个 ViewController。什么布尔? isIpad?什么视图控制器?您是说每次您的应用程序激活时,您都想告诉它“您仍在 iPad 上运行!”这没有任何意义。 【参考方案1】:

虽然我建议看一下@rmaddy 的第一条评论,但您可以在模块的任何位置声明一个存储属性(不必在应用程序委托中声明):

let isIpad = UIDevice.current.userInterfaceIdiom == .pad

这意味着不需要将值从应用委托传递给视图控制器。因此在视图控制器中——例如——:

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        if isIpad 
            // ...
        
    

【讨论】:

我不鼓励全局变量,计算也是为了改变内容,设备会在应用内的某个地方改变吗? @Sh_Khan 为什么?是不是因为每次调用都不需要计算?

以上是关于如何将布尔值从应用程序委托传输到视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图

需要将值从我的 tableView 传递到另一个视图上的标签?

如何将反序列化JSON中的列表传递给视图到选择列表

如何从视图控制器视图返回到目标 c 中的应用程序委托控制器视图?

将文本值从一个视图控制器传送到另一个视图控制器

如何将模型值从视图传递到控制器?