【问题标题】:Call app delegate method from view controller从视图控制器调用应用程序委托方法
【发布时间】:2015-08-22 16:29:59
【问题描述】:

我想知道我是否可以从另一个 ViewController 调用应用委托方法。

应用启动时,会调用application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Booli 方法。我可以从另一个视图控制器再次调用此方法吗?

【问题讨论】:

标签: ios swift appdelegate


【解决方案1】:

此方法仅在应用启动时调用一次。你不能来自 ViewController。而是在 AppDelegete 中创建用户定义的方法。并从 ViewController 调用该方法。通过获取 AppDelegate 的对象。

AppDelegate *appDel = (AppDelegate *)[UIApplication sharedApplication].delegate;
[appDel <Your method>];

【讨论】:

  • 第一行缺少[。我想这是更正后的线? AppDelegate *appDel = [(AppDelegate *)[UIApplication sharedApplication] delegate];
【解决方案2】:

不确定您为什么要这样做。您可能不应该,但为了回答这里的问题,它是:

// get a reference to the app delegate
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate

// call didFinishLaunchWithOptions ... why?
appDelegate?.application(UIApplication.shared, didFinishLaunchingWithOptions: nil)

【讨论】:

  • 感谢帮助我
  • 没问题。如果您有时间,请解释为什么要调用此函数两次。无论如何,请阅读 Ashish Kakkad 的链接帖子。
  • 当应用程序第一次午餐然后显示条款和条件页面当用户点击同意然后他可以去下一个登录 vc 并且可以登录但用户点击拒绝按钮然后调用下一个 vc 但用户按下登录他去条款和条件页面和同意条件
  • 并在 Swift4 中使用以下 let appDelegate = UIApplication.shared.delegate as! AppDelegate
【解决方案3】:

在 Swift 3.0 中,你可以这样调用:

let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.anyAppDelegateInstaceMethod()

【讨论】:

    【解决方案4】:

    构造函数:

    在代码末尾的 AppDelegate 类中添加构造函数

    斯威夫特 3.x

     class func shared() -> AppDelegate
    {
        return UIApplication.shared.delegate as! AppDelegate
    }
    

    斯威夫特 2.x

    func appDelegate () -> AppDelegate
    {
    return UIApplication.sharedApplication().delegate as! AppDelegate
    }
    

    并添加一个这样的变量

    var boolForFun = Bool()
    

    如何在课堂上使用引用?

    方法

    快速 3 倍 访问函数或变量

    AppDelegate.shared().boolForFun = true
    

    其他的

    appDelegate().methodFoo()
    

    变量

    appDelegate().foo
    

    【讨论】:

      【解决方案5】:

      斯威夫特 4、斯威夫特 5

      正如其他人所说,您不应该这样做。 如果您在某个应用程序生命周期中触发它并使用通知中心执行特定操作会更好。

      示例(在 ViewController 中):

      NotificationCenter.default.addObserver(
          self,
          selector: #selector(applicationWillEnterForeground),
          name: UIApplication.willEnterForegroundNotification,
          object: nil
      )
      

      但是,如果您确实必须调用应用程序委托方法,则可以使用此

      let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate
      

      【讨论】:

        猜你喜欢
        • 2011-12-29
        • 2012-01-11
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多