我创建了一个基本的NSTextView,我在Interface Builder中选择了以下选项:
- 编辑
- 选择
- 字段编辑器
- 富文本
- 撤消
- 图形
- 非连续布局
- 字体面板
- 统治者
- 督察栏
我将 NSViewController 设置为 NSTextView 的委托,我为此 NSTextView 所做的唯一其他自定义操作是启用插入选项卡和新行(通过接受第一响应者):
func textView(_ textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
if commandSelector == #selector(insertNewline(_:)) {
textView.insertNewlineIgnoringFieldEditor(self)
return true
} else if commandSelector == #selector(insertTab(_:)) {
textView.insertTabIgnoringFieldEditor(self)
return true
} //else if commandSelector == #selector(changeColor(_:)) {
//textView.setTextColor(NSFontPanel.colo, range: <#T##NSRange#>)
//}
return false
}
当我尝试使用字体面板+检查器栏中的命令时,除了更改字体大小或颜色外,所有命令都可以正常工作,有什么可能出错的地方吗?还是我需要做额外的绑定/委托等才能正常工作?
这很奇怪,因为如果我更改字体本身(所选文本)或粗细,它可以正常工作(不需要编码)。
更新
我已经找到了导致此问题的问题的根源。我正在使用模态 segue 显示的视图控制器中的文本视图。如果我从模态更改为显示,大小和颜色可以正常工作。也不需要额外的命令来插入新行和制表符。
有什么理由会这样吗?是否应该对 segue 进行任何自定义以避免这种情况?而且,为什么视图控制器显示会影响字体面板的行为?
NSFontPanel 有一个 'worksWhenModal' 属性,听起来好像它可能被设置为 'false'。
一个布尔值,指示接收器是否允许在模式窗口和面板中更改字体。文档: