问题标签 [uiscenedelegate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
33472 浏览

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

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

0 投票
8 回答
37441 浏览

swift - UIApplication.shared.delegate 等效于 SceneDelegate xcode11?

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

在 UIKit 中,我可以像这样访问 App Delegate 属性:

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

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

0 投票
2 回答
7305 浏览

swift - 如何使用 iPadOS 多窗口 (SceneDelegate) 获取 rootViewController?

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

现在我没有一个窗口了,如何访问 rootViewController?我需要它来获取对它所拥有的对象和边界的一些引用。

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

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

这是我的 AppDelegate:

我的场景委托:

0 投票
6 回答
7513 浏览

xcode - 如何获取多窗口 SceneDelegate Xcode 11 的当前键窗口等效项?

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

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

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

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

0 投票
12 回答
33264 浏览

ios - UIWindow 未在 iOS 13 中显示内容

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

这是我使用的代码,现在不起作用:

我已经尝试了很多东西,包括WindowScenes用来展示新的UIWindow,但找不到任何实际的文档或示例。

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

有没有人能够在 iOS 13 beta 中做到这一点?

谢谢

编辑

从提出这个问题到发布 iOS 13 的最终版本已经过去了一段时间。下面有很多答案,但几乎所有答案都包括一件事 -添加对 UIWindow 的强/更强的引用。您可能需要包含一些与新场景相关的代码,但请先尝试添加强引用。

0 投票
1 回答
1539 浏览

ios - 如何使用 iOS 13 在 iPhone 上启动场景的多个实例?

苹果开发者文档提到在 iOS 13 上可以使用多个场景实例(即 iPhone 和 iPad)

从他们的开发者文档中:

在 iOS 13 及更高版本中,用户可以同时创建和管理应用程序用户界面的多个实例,并使用应用程序切换器在它们之间切换。在 iPad 上,用户还可以并排显示您的应用程序的多个实例。UI 的每个实例都显示不同的内容,或以不同的方式显示相同的内容。例如,用户可以显示一个显示特定日期的日历应用实例,另一个显示整个月。

我已经在 iPadOS 上尝试过,我可以使用他们的 WWDC 视频中提到的手势和 UI 动作创建多个场景实例,但我没有找到任何关于如何在 iPhone 上实现这一点的参考,知道如何做到这一点真的很有帮助实现这一点或是否可能。

0 投票
0 回答
539 浏览

ios - 如何像使用 AppDelegate (UIApplicationDelegate) 一样获得对场景委托 (UIWindowSceneDelegate) 的引用?

在 iOS 13 之前,当 AppDelegate 为王时,您可以(当然您仍然可以)UIApplication.shared.delegate获取对您的 AppDelegate 的引用。但是,您如何获得对在 iOS 13 中管理单个窗口场景的 UIWindowSceneDelegate 的引用?UIWindowScene.shared.delegate不存在,很明显。

0 投票
1 回答
490 浏览

ios - iOS 13 performActionFor shortcutItem 现在在启动时不会在 SceneDelegate 中调用,但在应用启动后会调用。为什么?

performActionFor shortcutItem如果应用程序已经启动,则在我的 SceneDelegate 中调用,但如果应用程序实际上从快捷方式项启动,则不会调用它。为什么是这样?

0 投票
0 回答
800 浏览

ios - UISceneDelegate scene(_:openURLContexts:) 方法是在特定场景上调用过还是只是“第一个”?

我知道UISceneDelegate scene(_:openURLContexts:)委托方法UIScene相当于UIApplicationDelegate application(_:open:options:)委托方法。但是一个应用程序可以有多个活动场景,而一次只有一个会调用这个委托,而且它似乎总是“第一个”场景。

是否有任何条件或动作会导致特定场景(而不仅仅是“第一个”场景)的openURLContexts委托被调用,或者这是否是一个有缺陷的设计?我错过了什么?

让我用一个例子来说明情况。

您有一个支持 iPadOS 中多个场景的应用程序。用户正在为您的应用积极使用两个并排的场景。背景中甚至可能存在一些不连贯的场景。无论哪种方式,假设有多个场景。

假设您的应用程序可以打开某些类型的文件。用户从您的应用程序切换到文件应用程序或几乎任何允许您共享文件的应用程序。在另一个应用程序中,您选择一个文件并选择使用您的(多场景)应用程序打开它。

此时,您的应用程序被放回前台,并且openURLContexts仅在您的应用程序中当前活动的场景之一上调用委托。

如果您的应用程序支持自定义 URL 方案并且您的应用程序通过其自定义 URL 方案启动(或回到前台),则会出现同样的问题。

那么在场景委托上做这件事有什么意义呢?有多个场景。只有一个人调用了这个代表。根据您的应用程序的需要,您可能只想在一个特定场景中处理此文件,但它可能不是调用委托的场景。您需要编写代码来遍历现有场景并确定应该由哪个场景实际处理文件,而不管调用的场景如何。

UIApplicationDelegate鉴于此,调用处理打开的 URL 请求不是更好吗?或者,正如我在第二段中的原始问题所述,是否存在在特定场景中调用代表的条件?

0 投票
0 回答
836 浏览

ios - Xcode11 中的较低部署目标

在 Xcode11 中创建新项目时如何安全地降低部署目标?

我创建了一个单视图应用程序 -> 语言 - Swift,用户界面 - 故事板。Xcode 创建了一个 SceneDelegate.swift 以及一个我认为仅用于 SwiftUI 的故事板文件,并将部署目标设置为 iOS 13。

  • 当降低部署目标时,Xcode 抱怨“'UIScene' 仅在 iOS 13.0 或更高版本中可用”以及 SceneDelegate.swift 中的许多其他内容。
  • 我删除了这个文件并尝试运行,得到了这个错误:“如果应用程序委托要使用主故事板文件,它必须实现窗口属性”
  • 添加var window: UIWindow?到 AppDelegate.swift,但在清理和构建后错误仍然存​​在。