在NSOutlineView列调整大小期间更新格式化程序

我在NSOutlineView中有一列使用由DateFormatter格式化的NSTextFields。

当列变宽或变窄时,我希望格式化程序能够更新。 我认为对列调整大小作出响应的最佳位置是在NSTextField viewWillDraw()中。 当列调整大小时,它的效果非常好。 不幸的是,它只适用于可见的文本字段。 当您滚动表格视图时,那些看不见的文本字段永远不会改变。

这是迄今为止我所拥有的。

override func viewWillDraw() {
    super.viewWillDraw()
    guard let formatter = formatter as? DateFormatter else { return }

    switch self.visibleRect.width {
    case 0.0..<DateTextField.shortFormatWidth:
        formatter.dateStyle = .none
        formatter.timeStyle = .short
    case DateTextField.shortFormatWidth..<DateTextField.mediumFormatWidth:
        formatter.dateStyle = .short
        formatter.timeStyle = .short
    case DateTextField.mediumFormatWidth..<DateTextField.longFormatWidth:
        formatter.dateStyle = .medium
        formatter.timeStyle = .short
    default:
        formatter.dateStyle = .long
        formatter.timeStyle = .short
    }
}

我也想过在重新调整列大小后重新加载大纲视图会处理事情,但这似乎不起作用。

提前致谢。

链接地址: http://www.djcxy.com/p/85217.html

上一篇: Update Formatter during NSOutlineView column resize

下一篇: How many obscure subclasses of `NSFormatter` are there? Know of any others?