macOS: у SwiftUI есть пункт меню, который меняет URL WKWebView и заголовок главного окна? - PullRequest
1 голос
/ 19 января 2020

РЕДАКТИРОВАТЬ: решил изменить подход:

Привет, я создал пункт меню в моем приложении MacOS SwiftUI для "www.google.com".

Я использовал AppDelegate. быстро добавить

    @IBAction func google(_ sender: Any) {
        WebBrowserView.load(url: URL(string: "http://www.google.com")!)
    }

(что дает мне ошибку

Instance member 'load' cannot be used on type 'WebBrowserView'; 
did you mean to use a value of this type instead?

)

ContentView.swift говорит:

struct BrowserView: View {

    private let browser = WebBrowserView()

    var body: some View {
        HStack {
            browser
                .onAppear() {
                    self.browser.load(url: URL(string: "http://duckduckgo.com")!)
                }
        }
        .padding()
    }
}

I Мы также сопоставили пункт меню google.com с First Responder в Main.Storyboard и сопоставили его с функцией google

Но когда я нажимаю на элемент главного меню google.com - ничего не происходит. Что я здесь не так делаю?

Сначала я попытался скопировать всю структуру BrowserView из ContentView в AppDelegate и обернуть ее внутри @IBAction, но, похоже, это тоже не сработало.

РЕДАКТИРОВАТЬ: Чтобы избежать ошибки, я попытался это сделать:

import Cocoa
import SwiftUI
import WebKit

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    private let browser = WebBrowserView()

    @IBAction func google(_ sender: Any) {
        self.browser.load(url: URL(string: "http://www.google.com")!)
    }

, но, хотя у меня больше нет ошибки, нажатие на пункт главного меню ничего не делает.

Затем я решил попробовать еще одну пробную версию, которая заключается в том, чтобы поместить все в applicationDidFinishLaunching в AppDelegate @IBAction.

    @IBAction func duckduckgo(_ sender: Any) {
        window = NSWindow(
            contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
            styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
            backing: .buffered, defer: false)
        window.center()
        window.setFrameAutosaveName("Main Window")
        window.contentView = NSHostingView(rootView: contentView)
        window.makeKeyAndOrderFront(nil)
        window.title = "XReach WebClient https://duckduckgo.com"

        self.browser.load(url: URL(string: "http://duckduckgo.com")!)
    }

Теперь, когда это успешно меняет заголовок на duckduck go, браузер по-прежнему загружает предыдущую Вместо этого URL.

Какой самый чистый способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...