macOS学习之Windows and Window Contr

2017-01-19  本文已影响266人  TomatosX

Cascading Windows

为了改善Windows的位置,我们引入Cascading Windows(级联窗口)的概念。
Cascading Windows意味着一个窗口重叠在之前的窗口之上,并且标题栏可见。

Cascading Windows
  1. 新建一个WindowController.swift,继承自NSWindowController类
  2. 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页面。

First Responder 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,并去掉左上角的三个控制按钮。并添加相应的控件。

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按钮连接到这个方法上。

WindowController
上一篇下一篇

猜你喜欢

热点阅读