自定义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