【问题标题】:Simple OS X app with WKWebView viewer带有 WKWebView 查看器的简单 OS X 应用程序
【发布时间】:2014-10-01 21:57:15
【问题描述】:

我正在尝试使用新的WKWebView 和 Swift 语言创建带有 Web 查看器的简单 OS X 应用程序(不是 iOS)。我希望利用WKWebView 类的更快性能。

在项目 AppDelegate.swift 文件中,我有以下代码:

import Cocoa
import WebKit

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!
    @IBOutlet var containerView : NSView! = nil

    var webView: WKWebView?

    var url = NSURL(string:"http://www.google.com/")
    var req = NSURLRequest(URL: url)
    self.webView!.loadRequest(req)

}

在 MainMenu.xib 文件中,我向主窗口添加了一个自定义视图对象并将其链接到 @IBOutlet var containerView

我在最后两行代码中收到错误消息:

var req = NSURLRequest(URL: url)

‘AppDelegate. Type'没有名为'url'的成员

self.webView!.loadRequest(req)

预期声明

任何帮助将不胜感激。

【问题讨论】:

    标签: webview swift wkwebview


    【解决方案1】:

    我花了一段时间才弄清楚。

    import Cocoa
    @NSApplicationMain
    class AppDelegate: NSObject, NSApplicationDelegate {
        @IBOutlet weak var window: NSWindow!
        var viewController : ViewController!
    
        func applicationDidFinishLaunching(aNotification: NSNotification) {
            self.viewController = ViewController(nibName:"ViewController", bundle:nil)
            self.window.contentView = self.viewController!.view
            self.window.contentViewController = self.viewController!
            self.viewController!.view.frame = self.window.contentView.bounds;
        }
    
        ...
    }
    

    这基本上用我自己制作的视图和视图控制器替换了我的NSWindow 中的任何内容。我对ViewController 类的实现如下所示:

    import Cocoa
    import WebKit
    class ViewController: NSViewController {
        var webView: WKWebView?
    
        override func loadView() {
            self.webView = WKWebView()
            self.view = self.webView!
    
            var url = NSURL(string:"http://www.google.com/")
            var req = NSURLRequest(URL: url!)
            self.webView!.loadRequest(req)
        } 
    }
    

    所以基本上发生的事情是我创建了一个自定义视图控制器,将WKWebView 设置为其视图,然后我将它及其视图设置为NSWindow 视图控制器和视图。

    【讨论】:

      【解决方案2】:

      将最后三行(声明 urlreq 并加载请求)移动到 AppDelegate 上的方法中,例如 applicationDidFinishLaunching:(类似于 @MinnesotaSteve 的回答所暗示的)。你不能有这样的顶级语句。

      【讨论】:

      • 谢谢马特。我已按照建议将这三行包装成一个方法,并且不再出现代码错误。伟大的!但是,当我运行该应用程序时,我得到一个空白的灰色窗口。 Web 视图未加载任何页面。我检查了自定义视图对象,它连接到@IBoutlet var ContainerView。我错过了什么吗?
      • 是的,你是。您实际上并没有显示您的网络视图。您的容器视图不包含任何内容。使用代码(使用 addSubview)将您的 Web 视图添加到您的容器视图中,或者使用界面构建器将您的 Web 视图放入并直接将 IBOutlet 指向它。
      【解决方案3】:

      检查一下,看看它作为起点是否有用:

      导入 UIKit 导入 WebKit

      class ViewController: UIViewController {
      
          @IBOutlet var containerView : UIView?
          var webView: WKWebView?
      
          override func loadView() {
              super.loadView()
      
              self.webView = WKWebView()
              self.view = self.webView!
          }
      
          override func viewDidLoad() {
              super.viewDidLoad()
      
              var url = NSURL(string:"http://chart.finance.yahoo.com/z?s=AAPL&t=6m&q=l&l=on&z=s&p=m50,m200")
              var req = NSURLRequest(URL:url)
              self.webView!.loadRequest(req)
          }
      }
      

      【讨论】:

      • 谢谢。我已经尝试过了,它适用于 iOS,但不适用于 Mac OSX 我上面的尝试是尝试调整它以适用于 OS X。
      • UIViewController 不是特定于 iOS 而不是 OSX 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 2015-08-13
      相关资源
      最近更新 更多