当前位置: 首页 > 面试题库 >

Swift / iOS13-在ViewController中访问SceneDelegate窗口变量

申屠喜
2023-03-14
问题内容

是否可以从ViewController中的SceneDelegate访问窗口变量?基本上我需要一个替代方案,UIApplication.shared.delegate.window但是什么也找不到


问题答案:

iOS 13开始 ,应用程序可以具有多个活动窗口,因此您需要访问所需的窗口。因此,您可以访问任何View类似这样的窗口:

self.view.window

如果您 确实 要访问,则UISceneDelegate可以按以下方式进行访问:

self.view.window.windowScene.delegate

旧:不推荐

假设

  1. 只有一个场景代表。
  2. 只有一个场景和一个窗口。
  3. 该应用程序中的所有视图控制器都是该场景及其窗口的一部分。

您可以这样实现一个辅助变量SceneDelegate

private(set) static var shared: SceneDelegate?

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

    guard let _ = (scene as? UIWindowScene) else { return }
    Self.shared = self
}

那么您可以在任何地方访问它,如下所示:

SceneDelegate.shared?.window // or anything else


 类似资料:
  • 问题内容: 我有以下内容: 我如何从另一个ViewController 访问? 我需要访问此功能: 问题答案: 默认情况下,swift中的所有内容都是公开的,因此,如果您声明以下内容: 只要拥有它的实例,就可以访问它:

  • 问题内容: 我有两个快速文件: 和 在main.swift中, 我最初设置为。 将I设置为,一切正常。 但是,如果我尝试通过 view 这样的简单调用从 view.swift进行 访问,则即使变量已更改,它也总是会获得,即使它在main.swift中也没有变化。 该方法在 main.swift 如下所示: 编辑 这是代码(翻译成意大利语:D) 在此先感谢Alberto 问题答案: Swift中的“

  • 问题内容: 我刚刚创建了一个类,并给了它一些变量。不幸的是,我无法在中访问这些变量。但是,相同的语法也可以在游乐场中使用… 问题答案: 类声明 的语法为: 您的include 声明本身不是 声明 ,而是 声明 -特别是带有infix运算符的 二进制表达式 。

  • 问题内容: 我想实现一个单独的ErrorHandler类,该类在某些事件上显示错误消息。该类的行为应从其他不同的类中调用。发生错误时,它将有一个as输出。此AlertView的显示应始终位于顶部。因此,无论从何处引发错误,最顶层的viewController都应显示AlertMessage(例如,当异步后台进程失败时,无论在前台显示什么视图,我都将收到一条错误消息)。 我发现一些要点似乎可以解决我

  • 问题内容: 尝试符合Swift UIViewController子类中的UITableViewDataSource和UITableViewDelegate。 文件说,你应该在符合行后但那通常在超去。另一个不起作用。在超类之后使用逗号分隔的列表也不起作用 编辑: 还必须采用每种协议的所有必需方法,而我最初并未这样做。 问题答案: 您使用逗号: 但是要意识到,超类必须是逗号分隔列表中的第一项。 如果您

  • 问题内容: 目标是可以轻松访问任何级别的SwiftUI视图层次结构的托管窗口。目的可能有所不同- 关闭窗口,退出第一响应者,替换根视图或contentViewController。与UIKit / AppKit集成有时也需要通过窗口的路径,因此… 我在这里遇到和尝试过的 像这样的东西 或通过在每个SwiftUI视图中添加UIViewRepresentable / NSViewRepresentab