- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 macOS 应用程序中,我尝试在 NSToolbar
中复制 NSSegmentedControl
的 Photos.app 实现来控制 NSTabViewController
。作为引用,如下所示:
所以,我的方法如下:
NSTabView
header NSToolbar
NSSegmentedControl
作为 NSToolbarItem
。#selector
监听NSSegmentedControl
的更改。这是当前的实现:
class WindowController: NSWindowController, NSToolbarDelegate {
// MARK: - Identifiers
let mainToolbarIdentifier = NSToolbar.Identifier("MAIN_TOOLBAR")
let segmentedControlIdentifier = NSToolbarItem.Identifier("MAIN_TABBAR")
// MARK: - Properties
var tabBar: NSSegmentedControl? = NSSegmentedControl(labels: ["One", "Two"], trackingMode: NSSegmentedControl.SwitchTracking.selectOne, target: self, action: #selector(didSwitchTabs))
var toolbar: NSToolbar?
var tabBarController: NSTabViewController?
// MARK: - Life Cycle
override func windowDidLoad() {
super.windowDidLoad()
self.toolbar = NSToolbar(identifier: mainToolbarIdentifier)
self.toolbar?.allowsUserCustomization = false
self.toolbar?.delegate = self
self.tabBar?.setSelected(true, forSegment: 0)
self.tabBarController = self.window?.contentViewController as? NSTabViewController
self.tabBarController?.selectedTabViewItemIndex = 0
self.window?.toolbar = self.toolbar
}
// MARK: - NSToolbarDelegate
public func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
var toolbarItem: NSToolbarItem
switch itemIdentifier {
case segmentedControlIdentifier:
toolbarItem = NSToolbarItem(itemIdentifier: segmentedControlIdentifier)
toolbarItem.view = self.tabBar
case NSToolbarItem.Identifier.flexibleSpace:
toolbarItem = NSToolbarItem(itemIdentifier: itemIdentifier)
default:
fatalError()
}
return toolbarItem
}
public func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return [segmentedControlIdentifier, NSToolbarItem.Identifier.flexibleSpace]
}
public func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return [NSToolbarItem.Identifier.flexibleSpace, segmentedControlIdentifier, NSToolbarItem.Identifier.flexibleSpace]
}
// MARK: - Selectors
@objc func didSwitchTabs(sender: Any) {
let segmentedControl = sender as! NSSegmentedControl
if (segmentedControl.selectedSegment == 0) {
self.tabBarController?.selectedTabViewItemIndex = 0
} else if (segmentedControl.selectedSegment == 1) {
self.tabBarController?.selectedTabViewItemIndex = 1
}
}
}
而且,它正在发挥作用:
现在,我是 macOS 开发的新手,感觉这是解决这个问题的一种非常复杂且令人费解的方法。有没有更简单的方法可以实现同样的目标?也许在 Interface Builder 中以某种方式?这里可以做些什么来改进?我做错了什么?
感谢您的宝贵时间。
最佳答案
对于任何在工具栏上实现 NSSegmentedControl 并且它没有触发 IBAction 的人,我遇到了同样的问题并花了半天的时间来解决这个问题。问题是我将分段与 NSWindowController 类连接起来。
要解决此问题,请创建 NSWindow 的子类,将该类设置为 Storyboard上窗口的基类,然后创建指向 NSWindow 的 @IBOutlet @IBAction 链接。请记住,将其与 NSWindowController 链接将不起作用。
关于macos - 在NSToolbar中实现NSSegmentedControl来控制NSTabViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45688614/
我有一个 NSSegmentedControl,其中,在用户单击时,在将操作发送到其目标之前应满足一些条件。 到目前为止,我设法通过覆盖 -mouseDown 事件处理程序并仅在成功检查我的条件后调用
我有一个 NSTouchBar,其中一个项目的 View 是一个 NSSegmentedControl,它有 4 个项目 - A、B、C、D。对于有视力的人来说,它使感觉,但对于使用 VoiceOve
我有一个 NSSegmentedControl 设置为像带有模板图像图标的按钮(模式 Momentary)一样工作,但与 NSButton 不同,图像确实例如,当窗口打开时,不会改变/变暗。丢失 ke
我没有使用任何 Storyboard/NIB,我正在以编程方式创建我的所有 UI。 这是主窗口 Controller : class MainWindowController: NSWindowCon
我在工具栏中有一个 NSSegmentedControl。其模式设置为“瞬时”,因为这些片段应该看起来像按钮一样工作,而不是永久选择。 启用规则: 选择内容后,应启用所有 3 个片段。 当没有选择任何
我的 AppKit 应用程序的 NSSegmentedControl 没有在辅助功能检查器中显示任何标签,这意味着残疾用户将无法使用辅助设备与他们互动。在段控件上调用 setAccessibility
我正在尝试找到一种方法来更改所选控制按钮的颜色。这可能通过子类化 NSSegmentedControl 或 NSSegmentedCell 或任何其他方式吗?如果是这样,有人可以给我指路吗? 最佳答案
我在可拖动 View 中有一个 NSSegmentedControl (这是一个非常简化的测试用例来演示该问题)。 首次创建时,一切看起来都正常,如下图所示: 浅绿色背景的 View 是可拖动的。如果
我有一个 TableView ,其最右侧的列有一个 NSSegmentedCell。 从中提取单元格的 NSSegmentedControls 使用“任意”跟踪模式(又名:多重选择),并且基于可能值为
我在界面生成器上创建了这个 NSSegmentedControl 并保存在 xib 文件中。该控件最初有 4 个段。 如果我用这个 [self.myControl setSegmentCount:6]
我是 Mac 编程新手,但我对应用程序有一些想法。我的问题是:我有一个带有 2 个单元格的 NSSegmentedControl,如果选择了单元格号 1,我想在标签上写一些内容,例如蓝色。我怎样才能做
我希望我的 NSSegmentedControl 在启用时选择一个分段,在禁用时不选择任何分段(iTunes 中的 View NSSegmentedControl 具有的行为类型)。 这里有一些图片:
我的 Cocoa 应用程序中有一个表单,其中包含一个 NSSegmentedControl,我希望可以通过键盘控制它。然而,NSSegmentedControl 似乎很不愿意成为第一响应者。 将窗口的
我想自定义 UISegmentedControl 的背景颜色和文本颜色。有针对 IOS 执行此操作的选项,但没有找到针对 OSX 的任何内容。 最佳答案 您可以直接设置字体,例如: segmented
我已将 NSSegmentedControl 添加到普通窗口的水平分割 View 上的 Pane 中。我以为调整 Spring 会让分段控制中心自动运行,但事实并非如此。如何使其保持居中? 有人告诉我
我有一个非常动态的 UI,它在文档窗口的工具栏中使用了 NSSegmentedControl。 NSSegmentedControl 动态获取分配的元素。 元素的数量可以在 1 到 15 之间变化很大
我正在尝试构建一个分段控件,就像 TextEdit 中的粗体/斜体/下划线控件一样。 有没有办法为每个段设置自定义属性字符串?单元格上的 [set attributeStringValue:] 没有任
在 10.10 中,Apple 通过 Storyboard 和一些类引入了 AppKit 的一些更新。其中之一是 NSTabViewController。 在 WWDC Session 212 中,演
我正在尝试增加 NSSegmentedControl 的高度,使其超出 25px“常规”控件大小。我对 NSSegmentedCell 进行了子类化,我知道我有 2 种方法可以使用。 - (void)
对于我的 NSSegmentedControl,我用它来显示一个栏来控制 NSTableView。我设置了代码以编程方式控制大小: for (NSInteger i = 1; i segmentWi
我是一名优秀的程序员,十分优秀!