在TableView单元格内部更改NSTextField光标颜色

时间:2018-06-01 20:00:44

标签: cocoa nstextfield nstextview nstablecellview

我有一个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的引用,但我不确定。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

所以我的猜测是:

  1. 返回的对象为nil,您的演员阵容失败或
  2. 返回的对象是NSText的不同子类(因此不是NSTextView)并且您的演员表失败
  3. 您崩溃时获得的实际错误消息是什么?