自定义NSTabView – Szabolcs Toth –中

最近,我发现了关于NSToolbar和NSSegmentedControl的两篇非常有趣的文章。 一本是克里斯蒂安·蒂采(Christian Tietze)撰写的,另一本是由sanjeetsuhag写的。

在创建我的项目之一时,我遵循了Chritian的教程。 今天,对于另一个我想关注sanjeetsuhag的项目,但发现自己有些迷茫,因此决定撰写更详细的文章,希望他不会介意。

左侧是我们的项目,右侧是标准AppKit元素的外观。

步骤1.创建一个项目并命名

步骤2.删除视图控制器

步骤3.添加NSToolbar,但删除所有项目

步骤4.添加NSSegmentedControl并将段数减少到2

将“ Segment 0”设置为“ Selected”,激活第一个“ tab”或“ segment”。

步骤5.添加TabView控制器

步骤6.将TabView Controller添加到NSWindow作为内容视图

步骤7.将两个图像添加到视图中以检查它们是否正常工作

步骤8.将“ NSWindowController”“ New file”添加到我们的项目中

步骤9.使您的主窗口使用此新创建的类

步骤10.将NSSegmentedControl连接到新的WindowController类

// This is your newly added action 
@IBAction func segmentedControlSwitched(_ sender: Any) {
}

在方法内部实现以下内容:

 @IBAction func segmentedControlSwitched(_ sender: Any) { 
let segmentedControl = sender as! NSSegmentedControl

self.tabViewController?.selectedTabViewItemIndex = segmentedControl.selectedSegment
}

步骤11.在WindowController类中再添加两行,以匹配下面的代码

 import Cocoa 

class WindowController: NSWindowController {

var tabViewController: NSTabViewController?

override func windowDidLoad() {
super.windowDidLoad()

self.tabViewController = self.window?.contentViewController as? NSTabViewController

}
@IBAction func segmentedControlSwitched(_ sender: Any) {
let segmentedControl = sender as! NSSegmentedControl

self.tabViewController?.selectedTabViewItemIndex = segmentedControl.selectedSegment
}

}

运行代码时,您意识到出了点问题。 这与我们想要的相去甚远……

第十二步。做“魔术”

在情节提要板上选择“标签视图控制器”,然后在“属性检查器”选项卡中更改样式“未指定”。

然后,选择“制表符视图”并将样式更改为“表格”。

让我们现在尝试…

看起来好多了…

步骤13.将图像添加到分段控件

选择分段控件,然后在“属性”检查器选项卡上,将图像设置为“分段0”。

同样,对细分1重复上一步。

步骤14.最后的触摸

在WindowController的windowDidLoad方法中添加以下代码:

 if let window = window { 
if let view = window.contentView {
view.wantsLayer = true
window.titleVisibility = .hidden
window.titlebarAppearsTransparent = true
window.backgroundColor = .white
}
}

源代码:Github