如何从视图调用 NSViewRepresentable 上的方法?

2023-12-28

我很难理解 NSViewRepresentable 如何与 SwiftUI 视图交互。

例如,在下面的示例中,如何在单击视图中的按钮时加载不同的 URL?

import Cocoa
import SwiftUI
import WebKit
import PlaygroundSupport

struct InternalBrowser: NSViewRepresentable {
    func makeNSView(context: Context) -> WKWebView {
        let browser = WKWebView()
        browser.load(URLRequest(url: URL(string: "https://www.google.com")!))
        return browser
    }
    func updateNSView(_ nsView: WKWebView, context: Context) {
    }
}

struct Browser: View {
    var body: some View {
        GeometryReader { g in
            VStack {
                InternalBrowser().frame(width: 400, height: 400)
                Button(action: {
                    // how to tell InternalBrowser to load an URL here?
                }) {
                    Text("Load Different URL")
                }
            }
        }
    }
}

PlaygroundPage.current.setLiveView(Browser().frame(width: 500, height: 500))

单击视图中的按钮时如何加载不同的 URL?

这是可能方法的演示。使用 Xcode 11.4 / iOS 13.4 进行测试

struct InternalBrowser: NSViewRepresentable {
    @Binding var url: URL?

    func makeNSView(context: Context) -> WKWebView {
        return WKWebView()
    }

    func updateNSView(_ browser: WKWebView, context: Context) {
        if let url = self.url, url != browser.url {
            browser.load(URLRequest(url: url))
        }
    }
}

struct Browser: View {
    @State var resourceURL = URL(string: "https://www.google.com")
    var body: some View {
        VStack {
            Button(action: {
                self.resourceURL = URL(string: "https://www.stackoverflow.com")
            }) {
                Text("Load Different URL")
            }
            Divider()
            InternalBrowser(url: self.$resourceURL).frame(width: 400, height: 400)
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从视图调用 NSViewRepresentable 上的方法? 的相关文章

随机推荐

  • Spring Boot 中未调用 ClientHttpRequestInterceptor

    我正在尝试使用 ClientHttpRequestInterceptor 将日志记录添加到我的应用程序 我的拦截器没有被调用 不知道这里出了什么问题 这是我的代码 Component Slf4j public final class Res
  • SQL 模式匹配

    我有一个与 SQL 相关的问题 我想匹配两个字段的相似性并返回相似程度的百分比 例如 如果我有一个名为 doc 的字段 其中包含以下内容 This is my first assignment in SQL 在另一个领域我有类似的东西 My
  • Hibernate:复杂对象的初始化

    我在合理的时间内从数据库完全加载非常复杂的对象并使用合理的查询数量时遇到问题 我的对象有很多嵌入实体 每个实体都引用另一个实体 另一个实体引用另一个实体 依此类推 因此 嵌套级别为 6 因此 我创建了示例来演示我想要的内容 https gi
  • 无法使用 Node.js 处理 PHP 文件

    我有一个在 Heroku 服务器上运行的 Node js Web 应用程序 我的 javascript 中有一个 AJAX 请求 它将 GET 请求发送到服务器上的 PHP 文件 该请求工作正常 事实上 如果我在没有任何 Node js 而
  • Lumen (Laravel) Eloquent php artisan make:模型未定义

    我将 Lumen 1 0 用于 API 项目 我已经通过取消注释以下行来启用 Eloquent引导程序 app php file app gt withEloquent 但是当我想通过迁移创建第一个模型时 它失败了 php artisan
  • 在 SQLite android 中存储图像

    我有一个 SQLite 数据库 我使用此代码将图像存储为 BLOB URL url new URL http t0 gstatic com images q tbn ANd9GcRsaLl3TGB4W2hJFN Wh0DNVPQEYGtwe
  • GNU 排序命令的行为(使用非字母 ASCII 字符,例如点或分号)

    我想要sort命令平等对待所有字符 例如 当我这样做时 echo e TEST b nTESTa nTESTc sort TESTa TEST b TESTc 该点被忽略 我想得到TEST b在最后或第一个位置 但是 我在手册页中找不到正确
  • UNIX:同一路径上的两个同名目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我浏览 UNIX 系统时 当我执行以下操作时 我发现同一个路径上列出了五个具有相同名称的目录ls Dl 这是观点 为什么我说五个 两个同
  • 获取可用的 clojure 命名空间

    有没有一种惯用的方法来获取可以使用的可用名称空间 all ns 仅返回已使用的名称空间 Package getPackages 返回所有可用的 Java 包import 但仅限那些已使用的 Clojure 命名空间 然后我偶然发现这个帖子
  • 使用 ACL 调用 upload_file 时,Ruby S3“访问被拒绝”错误

    我正在尝试编写一个 Ruby 脚本 将文件上传到 AWS 并使该文件公开可用 我做了以下事情 s3 Aws S3 Resource new credentials Aws Credentials new KEY SECRET region
  • 当主键为 varchar 时,无法从 Laravel 的 Eloquent 检索列值

    我遇到了一个问题 我的 Laravel 的 Eloquent 模型没有给我名为 id 的列的值 它只是变成整数 0 而不是字符串 我虽然该列受到某种保护 但在 id 是整数的其他模型中 它返回的值很好 问题 我不能使用 VARCHAR 作为
  • 使用 jQuery 的 $().on('mouseenter',function(){}) 比 $().mouseenter(function(){}) 有优势吗?

    我经常看到这样的代码 thing on mouseenter function Do stuff 就我个人而言 我几乎总是这样写 thing mouseenter function Do stuff 同样 我也经常写 thing click
  • .NET 平台扩展 7 中的 Host.CreateDefaultBuilder 与 Host.CreateApplicationBuilder

    我们一般使用以下方式创建主机Host CreateDefaultBuilder 方法 这Host CreateDefaultBuilder返回一个IHostBuilder The IHostBuilder有一些扩展方法 我们可以通过它们配置
  • 阅读动画 GIF SDL 2

    我希望能够加载 GIF 动画 而不是在我正在开发的游戏中使用精灵表和网格 我相信这会让我做的事情比现在容易得多 我在 Google 上查了一下 但我发现的只是一个使用 Win32 调用的库 因此仅限于 Windows 我相信 如果我弄清楚如
  • 在Excel VBA中提取json数组的最大值而不进行迭代

    我有 JSON 数据字符串 我尝试从中提取 id 的最高值而不进行迭代 这是 JSON 数据字符串 ball coordinates id 3938706 fixture id 18795544 period id 4644037 time
  • 基于同一元素多个属性值的Marklogic查询

    我有以下 xml 样本1 xml
  • Pandas:随机化列中的字母

    我有一个如下所示的数据框 id1 id2 ab51c ee 1a cga abd21 我只想随机化字母 id1 id2 ge51r eq 1b olp cqw21 我想我可以做这样的事情 newid1 for index row in df
  • 如果函数的结果小于字段,如何增强搜索?

    我有一个表格 送货人可以在地图上选择他的位置 然后设置他所在的半径 当用户访问我的网站时 他可以执行查询 我想提高出席客户所在地的卖家的数量 基本上 我需要在卖方和客户点之间的 solr 上执行正弦函数 如果结果小于半径则进行提升 Boos
  • Sublime Text 自动缩进

    是否有任何命令 快捷方式可以在 Sublime Text 3 上一次自动缩进页面上的所有代码 e g On NetBeans I can do this with Alt Shift F 这在 Sublime 中非常简单 只是Ctrl Sh
  • 如何从视图调用 NSViewRepresentable 上的方法?

    我很难理解 NSViewRepresentable 如何与 SwiftUI 视图交互 例如 在下面的示例中 如何在单击视图中的按钮时加载不同的 URL import Cocoa import SwiftUI import WebKit im