0

我有一个NSTextFieldNSTableCelView子类中的那个。我想更改它的光标颜色,因为现在光标与背景相同。

在我的应用程序的其他地方,我用一个方便的扩展名更改了光标颜色,如下所示:

extension NSTextField {
  public func cursorColor(_ cursorColor: NSColor) {
    let fieldEditor = self.window?.fieldEditor(true, for: self) as! NSTextView
    fieldEditor.insertionPointColor = cursorColor
  }
}

我把这个方法放在viewWillDraw()我的NSTableCellView子类中:

override func viewWillDraw() {
  name.cursorColor(NSColor.white)
}

...但是应用程序在以下行中崩溃extension

let fieldEditor = self.window?.fieldEditor(true, for: self) as! NSTextView //Crash!

我认为这是因为它找不到对 的引用self.window,但我不确定。

任何想法我做错了什么?

4

1 回答 1

1

NSWindow.fieldEditor(_: for:)返回 an NSText?,但您正试图将其显式强制强制转换为NSTextView.

所以我的猜测是:

  1. 返回的对象是nil并且您的演员阵容失败或
  2. 返回的对象是NSText(因此不是NSTextView)的不同子类,并且您的演员失败

崩溃时收到的实际错误消息是什么?

于 2018-06-01T20:14:59.087 回答