一.创建用户界面:
.xib
文件.storyboard
文件
二.定义主用户界面:
三.展示多个.xib文件
- 创建一个视图(或者说窗口)控制器(
NSWindowController
)和.xib文件; - 创建视图控制器实例对象;
- 使用
showWindow(sender: AnyObject?)
和close()
方法来打开和关闭.xib文件
AppDelegate.swift文件
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
var windowController=SecondController(windowNibName: "SecondController")
func applicationDidFinishLaunching(aNotification: NSNotification) {
}
func applicationWillTerminate(aNotification: NSNotification) {
}
@IBAction func openWindow(sender: NSButton) {
windowController.showWindow(sender)
}
}
SecondController.swift文件
import Cocoa
class SecondController: NSWindowController {
override func windowDidLoad() {
super.windowDidLoad()
}
@IBAction func closeWindow(sender: AnyObject) {
self.close()
}
}
四.使用Storyboard
Storyboard(故事板)由两部分组成:
- Scenes:展示你应用界面的窗口
- Segues:定义场景之间的转场
当场景进行切换的时候,会调用下面的方法:
func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?)
在场景间传递数据:
- 在第一个场景中,创建
prepareForSegue
方法,使用segue.destinationViewController
来获取第二个场景的视图控制器名字,给representedObject属性分配一个值。 - 在第二个场景中,声明一个变量来接收从第一个场景传过来的值,对
representedObject
进行拆包取值。
ViewController.swift代码
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var textInput: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
print("viewController-viewDidLoad")
}
override var representedObject: AnyObject? {
didSet {
}
}
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
let secondScene=segue.destinationController as! First_secondView
secondScene.representedObject = textInput.stringValue
}
}
First_secondView.swift代码
import Cocoa
class First_secondView: NSViewController {
@IBOutlet weak var infoDetail: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
print("First_secondView-viewDidLoad")
infoDetail.stringValue=self.representedObject! as! String
}
}
效果如图: