Cascading Windows
为了改善Windows的位置,我们引入Cascading Windows(级联窗口)的概念。
Cascading Windows意味着一个窗口重叠在之前的窗口之上,并且标题栏可见。
- 新建一个WindowController.swift,继承自NSWindowController类
- 在
init
方法中添加代码shouldCascadeWindows = true
import AppKit
class WindowController: NSWindowController {
required init?(coder: NSCoder) {
super.init(coder: coder)
shouldCascadeWindows = true
}
}
Enable the Font Panel
在Storyboard中点击Menu中的Format,选择Font,选择Show Fonts,按住Control拖拽到First Responder,此时能够看到许多的方法,选择orderFrontFontPanel
,然后点击Show Fonts就可以打开Font Panel页面。
Show the Ruler by Default
在 ViewController.swift
中添加 �TextView
的IBOutlet,在 viewDidLoad
方法中添加 text.toggleRuler(nil)
,这样,TextView
中就会出现默认的ruler控制条了,也就是富文本控制栏。
@IBOutlet var text: NSTextView!
override func viewDidLoad() {
super.viewDidLoad()
text.toggleRuler(nil)
}
Modal Windows
在 Main.storyboard
(其实新建一个storyboard也可) 中添加新的WindowController,并去掉左上角的三个控制按钮。并添加相应的控件。
@IBOutlet weak var wordCount: NSTextField!
@IBOutlet weak var paragraphCount: NSTextField!
显示Model,即刚才新建的WindowController:
@IBAction func showWordCountWindow(sender: AnyObject) {
// 1
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let wordCountWindowController = storyboard.instantiateControllerWithIdentifier("Word Count Window Controller") as! NSWindowController
if let wordCountWindow = wordCountWindowController.window, textStorage = text.textStorage {
// 2
let wordCountViewController = wordCountWindow.contentViewController as! WordCountViewController
wordCountViewController.wordCount.stringValue = "\(textStorage.words.count)"
wordCountViewController.paragraphCount.stringValue = "\(textStorage.paragraphs.count)"
// 3
let application = NSApplication.sharedApplication()
application.runModalForWindow(wordCountWindow) // 运行一个新的窗口来显示信息
}
}
添加OK按钮的事件:
@IBAction func dismissWordCountWindow(sender: NSButton) {
let application = NSApplication.sharedApplication()
application.stopModal() // 关闭打开的Model(也就是窗口)
}
将OK按钮连接到这个方法上。