如何以编程方式在Today扩展中设置根视图控制器

时间:2019-05-29 07:40:53

标签: ios swift today-extension

我有一个没有情节提要的项目。我已经在AppDelegate中设置了根视图控制器。现在,我添加了今天的扩展。我得到了一个带有根视图控制器MainInterface.storyboard的新情节提要TodayViewController。如何删除MainInterface.storyboard并以编程方式设置根视图控制器?

3 个答案:

答案 0 :(得分:1)

Xcode 11.0

从扩展程序中打开 Info.plist 并更改

<dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    ...
</dict>

收件人:

<dict>
    <key>NSExtensionPrincipalClass</key>
    <string>NameOfYourExtension.NameOfYourViewController</string>
    ...
</dict>

删除 MainInterface.storyboard ,它应该可以正常工作。

答案 1 :(得分:0)

在您的应用程序委托didFinishLaunchingWithOptions中,获取根视图控制器并推送视图控制器,在下面,我将HomeViewController设置为替换它

 let rootViewController = self.window!.rootViewController as! UINavigationController
 let vc = HomeViewController.init(nibName: "HomeViewController", bundle: nil)
 rootViewController.pushViewController(vc, animated: false)

答案 2 :(得分:0)

使用URL方案实现您的目标,请参见以下代码。

TodayViewController (今天的扩展名为swift文件)中写入以下代码

@IBAction func buttonTapped(_ sender: UIButton) {
        let url = URL(string: "MyAppTodayExtension://")!
        self.extensionContext?.open(url, completionHandler: { (success) in
            if (!success) {
                print("error: failed to open app from Today Extension")
            }
        })
    }
在您的 info.plist 文件中

添加URL方案

enter image description here

<key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>MyAppTodayExtension</string>
            </array>
        </dict>
    </array>

点击今天的分机号,然后在 AppDelegate.swift 文件中获得以下呼叫方法。

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        //Write code here for navigating to a specific controller OR set root view controller
        return true
    }