2016-11-21 58 views
0

我有NSTextView,我想显示使用NSTableView的自动完成选项(如Xcode自动完成)。问题是,当textView是第一响应者时,tableView显示为未聚焦(这是真的),但我想假装它也是活动的。有没有一种简单的方法来实现这一点(具有活动单元格选择颜色的firstResponder textView和tableView)?NSTableView假装为活动

回答

0

所以我设法解决了很多实验的问题。 这里是我的解决办法:

设置NSTableView的:

tableView.refusesFirstResponder = true 
tableView.selectionHighlightStyle = .none 

上NSTableCellView子类中实现下面的代码:

override func awakeFromNib() { 
    super.awakeFromNib() 

    registerNotifications() 
} 

deinit { 
    unregisterNotifications() 
} 

private func registerNotifications() { 
    NotificationCenter.default.addObserver(self, 
              selector: #selector(selectionIsChanging), 
              name: NSNotification.Name.NSTableViewSelectionIsChanging, 
              object: nil) 
} 

private func unregisterNotifications() { 
    NotificationCenter.default.removeObserver(self) 
} 

@objc private func selectionIsChanging() { 
    if let row = superview as? NSTableRowView, row.isSelected == true { 
     self.backgroundColor = NSColor.alternateSelectedControlColor 
    } else { 
     self.backgroundColor = NSColor.clear 
    } 
}