Swift 在没有xib文件的情况下初始化NSViewController的子类
我目前正在使用Swift 2编写一个OS X应用程序。我希望构建没有XIB或故事板的UI。我遇到的问题是初始化一个自定义ViewController,我可以将视图放入其中 这是我的AppDelegate:Swift 在没有xib文件的情况下初始化NSViewController的子类,swift,macos,cocoa,Swift,Macos,Cocoa,我目前正在使用Swift 2编写一个OS X应用程序。我希望构建没有XIB或故事板的UI。我遇到的问题是初始化一个自定义ViewController,我可以将视图放入其中 这是我的AppDelegate: @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! var viewController: MyViewControl
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
var viewController: MyViewController?
func applicationDidFinishLaunching(aNotification: NSNotification) {
viewController = MyViewController()
self.window.contentView!.addSubview(viewController!.view)
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code here to tear down your application
}
}
和MyViewController:
class MyViewController: NSViewController {
var textField: NSTextField?
override func viewDidLoad() {
super.viewDidLoad()
textField = NSTextField(frame: NSRect(x: 10, y: 10, width: 100, height: 100))
textField!.bezeled = false
textField!.drawsBackground = false
textField!.editable = false
textField!.selectable = false
textField!.stringValue = "TEST"
self.view.addSubview(textField!)
}
}
问题是,当我将viewController
的视图添加为窗口的contentView
的子视图时,会出现以下错误,并且视图不会加载
2015-12-06 17:34:18.204 Test[9682:1871784] -[NSNib
_initWithNibNamed:bundle:options:] could not load the nibName:
Test.MyViewController in bundle (null).
我不确定我做错了什么-如果有任何帮助,我们将不胜感激。来自:
如果您为nibNameOrNil传递一个nil,那么nibName将返回nil和
loadView将引发异常;在这种情况下,您必须调用
setView:在调用视图之前,或覆盖loadView
MyViewController()
的初始值设定项使用nil
作为名称
两种可能的修复方法:
1.在AppDelegate中设置视图
或者
2.在子类ViewController中重写loadView
您真的需要精确的
NSViewController
?您可以通过编程方式创建和添加所有NSView
。还有,为什么不创建一个空的NSViewController
nib.Awesome!使用第二种方法帮助我解决了抛出的异常。谢谢
func applicationDidFinishLaunching(aNotification: NSNotification) {
viewController = MyViewController()
viewController!.view = NSView() // added this line; edit to set any view of your choice
self.window.contentView!.addSubview(viewController!.view)
}
import Cocoa
class MyViewController: NSViewController {
var textField: NSTextField?
override func loadView() {
self.view = NSView() // any view of your choice
}
override func viewDidLoad() {
super.viewDidLoad()
textField = NSTextField(frame: NSRect(x: 10, y: 10, width: 100, height: 100))
textField!.bezeled = false
textField!.drawsBackground = false
textField!.editable = false
textField!.selectable = false
textField!.stringValue = "TEST"
self.view.addSubview(textField!)
}
}