视图和Storyboard

来源:互联网 发布:亚盛医药 知乎 编辑:程序博客网 时间:2024/06/07 01:40

一.创建用户界面:

  • .xib文件
  • .storyboard文件

二.定义主用户界面:

三.展示多个.xib文件

  1. 创建一个视图(或者说窗口)控制器(NSWindowController)和.xib文件;
  2. 创建视图控制器实例对象;
  3. 使用showWindow(sender: AnyObject?)close()方法来打开和关闭.xib文件

AppDelegate.swift文件

import Cocoa@NSApplicationMainclass 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 Cocoaclass 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 Cocoaclass 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 Cocoaclass First_secondView: NSViewController {    @IBOutlet weak var infoDetail: NSTextField!    override func viewDidLoad() {        super.viewDidLoad()        print("First_secondView-viewDidLoad")        infoDetail.stringValue=self.representedObject! as! String    }}

效果如图:

0 0