【问题标题】:How to set a SwiftUI View as a first responder manually?如何手动将 SwiftUI 视图设置为第一响应者?
【发布时间】:2020-03-20 04:20:49
【问题描述】:

我正在构建一个主要使用 SwiftUI 的应用程序,但我必须使用 UIKit ViewController 来与 PencilKit 交互。我正在使用UIViewControllerRepresentable 来连接它们。

所以我有一个 ViewController 用于设置我的应用程序的 PencilKit 部分,并且在其中我必须设置一个依赖于 UIResponder 的 PKToolPicker。为此,我必须编写以下代码:

canvasView = PKCanvasView(frame: view.bounds)
toolPicker.setVisible(true, forFirstResponder: canvasView)
canvasView.becomeFirstResponder()

我这里使用的这个canvasView视图是控制绘图区域的视图,通常你必须将它设置为前面提到的ViewController的子视图。问题是,在我的例子中,这个 ViewController 嵌套在 UIViewControllerRepresentable 中,而 UIViewControllerRepresentable 又嵌套在 SwiftUI 视图中。因此,我需要将此 SwiftUI 视图添加为第二个 FirstResponder,否则每次我在 SwiftUI 视图上运行手势时,PKTool 都会消失,因为 canvasView 不再是第一响应者。

所以我的问题是我该怎么做?如何将 SwiftUI 视图设置为第一响应者?找不到如何获取 SwiftUI 的 UIResponder 对象,所以我可以将其添加为 FirstResponder,有人知道怎么做吗?

【问题讨论】:

    标签: uikit swiftui pencilkit


    【解决方案1】:

    我不太清楚你的具体问题,但我认为在你的 UIViewControllerRepresentable 中你也有

    canvasView.becomeFirstResponder()
    

    就在你之前

    toolPicker.setVisible(true, forFirstResponder: canvasView)
    

    【讨论】:

    • 您好,谢谢您的回答!只是重新阅读我的问题,并意识到它是一个非常灾难。重新写了大部分内容以使其更清晰。是的,你是对的,我必须对其执行becomeFirstResponder,并将其添加到问题中。
    猜你喜欢
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多