美文网首页
macOS学习之Windows and Window Contr

macOS学习之Windows and Window Contr

作者: TomatosX | 来源:发表于2017-01-19 11:37 被阅读266次

    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

    相关文章

      网友评论

          本文标题:macOS学习之Windows and Window Contr

          本文链接:https://www.haomeiwen.com/subject/rekibttx.html