NSTableView 假装处于活动状态

Posted

技术标签:

【中文标题】NSTableView 假装处于活动状态【英文标题】:NSTableView pretend to be active 【发布时间】:2016-11-21 22:23:11 【问题描述】:

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

【问题讨论】:

【参考方案1】:

所以我设法通过大量实验解决了这个问题。 这是我的解决方案:

设置 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
    

【讨论】:

以上是关于NSTableView 假装处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章

当且仅当区域在 Emacs 中处于活动状态时,标记是不是处于活动状态?

如何确定当前视图控制器是不是处于活动状态,如果处于活动状态则执行代码

搜索栏处于活动状态时,状态栏图标变为黑色

检查 PIP 是不是处于活动状态

检查 WooCommerce 是不是处于活动状态以及使用的版本

根据条件确定 NavigationLink 是不是处于活动状态