Objective c NSTextField和NSTouchbar
我正在实现触摸栏功能。 我希望在编辑Objective c NSTextField和NSTouchbar,objective-c,swift,xcode,macos,cocoa,Objective C,Swift,Xcode,Macos,Cocoa,我正在实现触摸栏功能。 我希望在编辑NSTextField时显示特定的触摸栏 我尝试了两种方法: 使用touchbar属性设置触摸栏: field.touchBar=myTouchBar 和子类化NSTextField以覆盖makeTouchBar()函数: 类MyTextField:NSTextField { 重写func makeTouchBar(){return myTouchBar} } 编辑字段时,这两种方法都会显示空的触摸栏。更改isAutomaticTextComple
NSTextField
时显示特定的触摸栏
我尝试了两种方法:
- 使用
属性设置触摸栏:touchbar
field.touchBar=myTouchBar
- 和子类化
以覆盖NSTextField
函数:makeTouchBar()
类MyTextField:NSTextField
{
重写func makeTouchBar(){return myTouchBar}
}
编辑字段时,这两种方法都会显示空的触摸栏。更改isAutomaticTextCompletionEnabled
和AllowCharacterPickerTouchBarItem
属性不会更改它-只会显示相应的按钮
但是,使用NSTextView
或许多其他类型的NSView
执行完全相同的操作非常有效
您知道在编辑
NSTextField
时是否可以使用自定义工具栏吗?感谢@Willeke的回答,我已经找到了解决方案。然而,这相当棘手:
- 首先,子类
保留另一个NSTextField
:NSTouchBar
类MyTextField:NSTextField
{
私人触摸栏:有吗?
var编辑器:NSText?
@可用(OSX 10.12.2,*)
func setTouchBar(touchBar:NSTouchBar?)
{
innerTouchBar=触摸栏
}
@可用(OSX 10.12.2,*)
func getTouchBar()->NSTouchBar?
{
innerTouchBar as?NSTouchBar
}
}
- 然后,子类
使用提供的NSTextView
:NSTouchBar
@可用(OSX 10.12.2,*)
类MyTextView:NSTextView
{
private var innerTouchBar:NSTouchBar?
便利初始化(触摸栏:NSTouchBar?)
{
self.init()
innerTouchBar=触摸栏
}
重写func makeTouchBar()->NSTouchBar?
{
内触板
}
}
- 当要求
获取NSWindowController
的NSTextField
时,使用NSTextView
的NSTextField
创建自定义innerTouchBar
:NSTextView
- 当然,不要忘记在XIB或代码中使用
而不是MyTextField
,并且在创建后第一件事就是调用NSTextField
函数setTouchBar(:)
NSTextField
都有一个底层NSTextView
,它实际上是第一个响应者,以及显示其触摸栏的对象。我们无法直接从NSTextField
访问底层NSTextView
。相反,NSTextField
要求nwinowcontroller
使用哪个NSTextView
。因此,当发生这种情况时,在NSWindowController的windowWillReturnFieldEditor(:,to:)
中,我们必须使用正确的触摸栏返回自定义NSTextView
。
我认为这可以应用于触摸栏以外的其他事物…NSTextField
不是第一响应者。看见