标签: uiscenedelegate

支持 iOS 12 和 13 时的 AppDelegate 和 SceneDelegate

我需要支持 iOS 12 和 iOS 13。

我应该在AppDelegate和之间复制代码SceneDelegate吗?

例如:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    let window = UIWindow(windowScene: windowScene)

    window.rootViewController = HomeViewController()
    window.makeKeyAndVisible()

    self.window = window
}
Run Code Online (Sandbox Code Playgroud)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let window = UIWindow(frame: UIScreen.main.bounds)
    window.rootViewController = HomeViewController()
    window.makeKeyAndVisible()

    self.window = window

    return true
}
Run Code Online (Sandbox Code Playgroud)

如果我不这样做,在 1 个版本中我最终会出现黑屏,但是如果我这样做并以 的viewDidLoad方法打印, …

ios appdelegate swift uiscenedelegate

20
推荐指数
3
解决办法
9850
查看次数

iOS 13中未调用应用程序委托方法

我正在使用Xcode 11并为iOS 13构建应用程序。在Xcode中创建的新项目中,缺少一些UIApplicationDelegate方法,因此我将它们重新添加到了应用程序委托文件中。“单视图应用程序”项目的新模板缺少这些方法。问题在于,除了之外,没有其他任何委托方法被调用-application:didFinishLaunchingWithOptions:。这是我的应用程序委托:

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"application:didFinishLaunchingWithOptions:");
    return YES;
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"applicationDidEnterBackground:");
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"applicationWillEnterForeground:");
}
#pragma mark - UISceneSession lifecycle

- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
    return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}

- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
}

@end
Run Code Online (Sandbox Code Playgroud)

xcode uiapplicationdelegate ios ios13 uiscenedelegate

15
推荐指数
3
解决办法
6320
查看次数

UIWindow不显示iOS 13中的内容

我正在升级应用程序以使用UISceneiOS 13中定义的新模式,但是该应用程序的关键部分已停止工作。我一直在使用a UIWindow来覆盖屏幕上的当前内容并向用户显示新信息,但是在我正在使用的当前Beta(iOS + XCode beta 3)中,该窗口会出现,但随后会立即消失。

这是我正在使用的代码,现在无法使用:

let window = UIWindow(frame: UIScreen.main.bounds)
let viewController = UIViewController()
viewController.view.backgroundColor = .clear
window.rootViewController = viewController
window.windowLevel = UIWindow.Level.statusBar + 1
window.makeKeyAndVisible()
viewController.present(self, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多方法,包括使用WindowScenes来呈现新内容UIWindow,但是找不到任何实际的文档或示例。

我的尝试之一(没有用-窗口出现并立即消失的相同行为)

let windowScene = UIApplication.shared.connectedScenes.first
if let windowScene = windowScene as? UIWindowScene {
    let window = UIWindow(windowScene: windowScene)
    let viewController = UIViewController()
    viewController.view.backgroundColor = .clear
    window.rootViewController = viewController
    window.windowLevel = UIWindow.Level.statusBar + 1
    window.makeKeyAndVisible()
    viewController.present(self, animated: true, completion: …
Run Code Online (Sandbox Code Playgroud)

uiwindow ios swift ios13 uiscenedelegate

15
推荐指数
4
解决办法
7800
查看次数

UIScene概念不清楚

在我们都习惯之前,AppDelegate我们创建UIWindowrootViewController为此设置的方法Window。有时,当我们需要自定义警报时,我们可以创建一个新的警报UIWindow

现在 Xcode 会根据这个场景自动创建UIScene和创建UIWindow。我将不胜感激,如果有人能详细解释如何在现实生活中使用这个场景,什么是他们的主要受益于仅使用UIWindowAppDelegate

因为这篇文章没有解释太多

iphone ios swift uiscenedelegate uiscene

15
推荐指数
2
解决办法
1276
查看次数

UIApplication.shared.delegate是否等效于SceneDelegate xcode11?

我在SceneDelegate中定义了一个let属性。我希望某些ViewController能够在场景中访问它。

在UIKit中,我可以访问App Delegate属性,如下所示:

UIApplication.shared.delegate
Run Code Online (Sandbox Code Playgroud)

然后强制转换并指定属性名称...

是否有等效的方法可以从UIViewController的实例获取对视图控制器所在的SceneDelegate的引用?

swift uiscenedelegate

11
推荐指数
6
解决办法
3261
查看次数

SceneDelegate 函数从未被调用

我有一个 SwiftUI/SpriteKit 项目。在一次充满错误的更改包标识符的任务中,我决定创建一个项目并复制我的文件。

现在我已经有了这个包含所有旧文件的新项目,但是当我运行它时,我得到一个空白屏幕,因为我的SceneDelegate函数scene(_:willConnectTo:options:)没有被调用。

根据文档SceneDelegate如果您对info.plist. 然而,我已经做了这些改变,但我的SceneDelegate仍然不起作用。

在我的 中info.plist,我有以下内容: 在此输入图像描述

这是我的相关部分SceneDelegate

import UIKit
import SwiftUI

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?
    
    static var mainData = MainData()

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property …
Run Code Online (Sandbox Code Playgroud)

lifecycle info.plist swift swiftui uiscenedelegate

10
推荐指数
1
解决办法
4603
查看次数

与 AppDelegate 和 SceneDelegate 的深层链接

我正在尝试实现深层链接来导航到应用程序上的帖子,这是一个较旧的项目,所以我必须添加该类SceneDelegate。仅当应用程序处于活动状态或在后台时,深层链接实现才有效。如果应用程序尚未加载,深层链接将不起作用。我看过很多关于此的帖子和教程,但没有找到原因,有人遇到过类似的问题吗?

在类中AppDelegate,我添加了实现来处理以下函数的链接:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {}

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {}

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {}
Run Code Online (Sandbox Code Playgroud)

SceneDelegate我实现处理以下函数中的链接:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {}

func …
Run Code Online (Sandbox Code Playgroud)

deep-linking ios appdelegate swift uiscenedelegate

10
推荐指数
1
解决办法
9406
查看次数

如何在iPadOS多窗口(SceneDelegate)中获得rootViewController?

我正在使用Xcode 11(beta3)并为iOS 13构建应用程序。在我的项目中,我创建了UIWindowSceneDelegate在Info.plist中声明它的委托方法。现在,我可以创建多个窗口(和UIScene)。

现在我已经没有单个窗口了,如何访问rootViewController?我需要它来获取对它所持有的对象和范围的一些引用。

在我的AppDelegate window is nil和ViewController(子视图控制器)实例中,我尝试使用,self.view.window.rootViewController但发现这viewDidLoad()还为时过早(我认为),并且该窗口仍为nil,可以在中工作viewDidAppear(),但是我不需要每次都进行此过程视图控制器出现的时间。

这种处理应用程序场景的新方法的最佳实践是什么?

这是我的AppDelegate:

func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
        return true
    }

    func application(_ application: UIApplication,
                     configurationForConnecting connectingSceneSession: UISceneSession,
                     options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }
Run Code Online (Sandbox Code Playgroud)

我的SceneDelegate:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // yes it's empty, I'm using storyboard
    }
Run Code Online (Sandbox Code Playgroud)

ios13 xcode11 uiscenedelegate

8
推荐指数
2
解决办法
1249
查看次数

如何获得多窗口 SceneDelegate Xcode 11 的当前 keywindow 等效项?

我正在将适用于 iPadOS 的 iOS13 应用程序转换为 SceneDelegate(多窗口)。

如何从当前的 SceneDelegate 获取当前的 UIWindow?

我知道 a 可以使用UIView.windowor访问当前场景UIViewController.view.window,但是我有一个非 UI 类(AppDelegate),我需要在其中获取窗口(iOS12 之前的 keyWindow)以在所有内容的顶部显示小吃吧。

我曾经这样做,[UIApplication sharedApplication].keyWindow但现在,当然,这是错误的。

xcode ios13 uiscenedelegate uiscene

7
推荐指数
3
解决办法
6621
查看次数

应用程序关闭时动态链接不起作用,仅在后台时

我一直在努力在我的应用程序中包含动态链接。我已经对其进行了设置,以便可以正确生成和接收链接,但它们仅在应用程序打开并在后台运行时才有效。如果应用程序完全关闭,则链接只会打开应用程序。看起来它没有调用 AppDelegate 中的 continueUserActivity 方法,即使我在 didFinishLaunchingWithOptions 方法中返回 TRUE。我已经读到我应该在 didFinishLaunchingWithOptions 方法中获取传入的 URL,但是可用的答案不起作用并且已经过时,所以我希望有人会知道。

这是代码:

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate{

var window: UIWindow?


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()
    return true
}

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
            
    if let incomingURL = userActivity.webpageURL {
        
        let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) { (dynamicLink, error) in
            guard error == nil else {
                print(error!.localizedDescription) …
Run Code Online (Sandbox Code Playgroud)

deep-linking firebase swift firebase-dynamic-links uiscenedelegate

7
推荐指数
1
解决办法
951
查看次数