NSTableView里面的NSDatePicker的组件不能被选中

问题描述 投票:0回答:1

在我的表视图中,每一行都包含一个弹出按钮和一个日期选择器。单击弹出按钮时,它的行为符合预期:出现菜单,我可以更改所选项目。但是当点击日期选择器的日期组件时,表格视图行被选中,就像我点击一个非交互式控件一样(例如,当点击一个不可编辑的文本字段时,表格视图选择也会改变).只有当单击步进器(右侧的向上/向下箭头)时,才会选择第一个日期组件,然后我也可以单击其他组件。

我可以更改此行为,以便单击日期选择器的行为就像我直接与其交互一样,而不是表格视图吗?

cocoa tableview
1个回答
0
投票

日期选择器似乎与表视图中的文本字段不同。虽然我可以通过第一次点击激活文本字段,但点击日期选择器首先选择表格行,然后第二次点击选择日期选择器组件。

当使用

NSTableViewDelegate.tableView(_:shouldSelect:)
禁用表格视图选择并返回
false
时,虽然文本字段仍然可以激活,但日期选择器不再响应(除非先单击右侧的步进器)。

不过,其他答案的解决方案(如 @Willeke 的评论中所述)也适用于此。

class MyTableView: NSTableView {
    
    override func hitTest(_ point: NSPoint) -> NSView? {
        let myPoint = superview!.convert(point, to: self)
        let column = column(at: myPoint)
        let row = row(at: myPoint)
        if row >= 0, column >= 0, let cell = view(atColumn: column, row: row, makeIfNecessary: false), let datePicker = cell.hitTest(convert(myPoint, to: cell.superview)) as? NSDatePicker {
            return datePicker
        } else {
            return super.hitTest(point)
        }
    }
    
}
© www.soinside.com 2019 - 2024. All rights reserved.