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

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

【问题讨论】:

    标签: macos cocoa nstableview nstextview first-responder


    【解决方案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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2022-01-23
      相关资源
      最近更新 更多