在整个应用程序中重新调用应用程序委托

Posted

技术标签:

【中文标题】在整个应用程序中重新调用应用程序委托【英文标题】:Re-call app delegate throughout app 【发布时间】:2017-07-13 01:21:06 【问题描述】:

我正在制作一个包含教程的 swift 应用程序。当我尝试回到主控制器时,选项卡栏项目变为灰色(它们应该是白色的)。这是因为我在应用程序委托中设置了标签栏。有没有办法以编程方式从视图控制器调用应用程序委托?

我想调用 didFinishLaunchingWithOptions() 函数

【问题讨论】:

How do I get a reference to the app delegate in Swift?的可能重复 我会尽量避免在您的 AppDelegate 中放置大量自定义代码并在整个应用程序中引用它。我的建议是继承 UITabBarController 并在其中添加您需要的任何逻辑。您应该能够从其他 UIViewController 子类中获取对您的 UITabBarController 的引用。 【参考方案1】:

如果您的意思是您的应用委托中有一个方法可以将标签栏设置为自定义颜色。然后是的,(如果您更改了 AppDelegate,请将其替换为您的应用代理的类名):

let appDelegate = UIApplication.shared.delegate as? AppDelegate

appDelegate?.yourCustomizeMethod()

如果您是在“didFinishLaunchingWithOptions”方法中自定义标签栏,那么您必须将其提取到自己的自定义函数中。

【讨论】:

类似什么? ` if let appDelegate = UIApplication.shared.delegate as? AppDelegate didFinishLaunchingWithOptions() ` 不,那个方法有你没有传递的参数。只需使用自定义界面的代码在您的应用程序委托中创建另一个功能。然后在 didFinishLaunchingWithOptions 中调用该方法。此外,按照我的回答中的说明自行调用该方法。再说一次,这不是真的推荐。您的应用程序委托不应因功能而臃肿。理想情况下,您希望将视图控制器子类化,以便应用自定义代码。或者您可以创建一个执行相同操作的实用程序类。【参考方案2】:
    if let appDelegate = UIApplication.shared.delegate as? AppDelegate 
        //do something with appDelegate
    

【讨论】:

如何在viewdidload @Yun CHEN中调用函数

以上是关于在整个应用程序中重新调用应用程序委托的主要内容,如果未能解决你的问题,请参考以下文章

通过拖动委托向上或向下拖动一行来重新排列表格中的部分(iOS 11)

iOS 委托和单例模式

如何在 Swift Flutter 插件中接收应用程序委托调用?

谁在调用删除?

如何在其他视图中重新加载 TableView?

重新加载uitableview后滚动表格视图