与可变高度可编辑NSTextFields在MacOS的应用NSTableView的行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与可变高度可编辑NSTextFields在MacOS的应用NSTableView的行相关的知识,希望对你有一定的参考价值。

Xcode的10.1,雨燕4.2,MACOS 10.14.2

我试图做一个简单的做了,那里有一系列NSTableView行的MacOS的列表应用,每一个里面是一个NSTextField。每个字段是一个待完成项目。我想NSTableView行扩大以适应每个NSTextField中的文本的大小。

我有以下所有工作的:

  1. 设置在NSTextField文字中并根据需要NSTableView行扩大。自动布局约束在我的故事板设置。
  2. 使用tableView.reloadData(forRowIndexes: ..., columnIndexes: ...)设置文本和正确调整大小的表行。 reloadData works但这样做tableView.reloadData()NSTextField文本单行总是复位如下所示:如果你点击进入reloadData fails重新加载整个表后,有趣的是NSTextField,现场调整大小以适合再次对其内容:Clicking a row fixes it

我相信我已在我的NSTextField所有适当的自动布局限制,我使用了定制的子类,以及(从helpful answer here):

class FancyField: NSTextField
  override var intrinsicContentSize: NSSize 
    // Guard the cell exists and wraps
    guard let cell = self.cell, cell.wraps else return super.intrinsicContentSize

    // Use intrinsic width to jibe with autolayout
    let width = super.intrinsicContentSize.width

    // Set the frame height to a reasonable number
    self.frame.size.height = 150.0

    // Calcuate height
    let height = cell.cellSize(forBounds: self.frame).height

    return NSMakeSize(width, height)
  

  override func textDidChange(_ notification: Notification) 
    super.textDidChange(notification)
    super.invalidateIntrinsicContentSize()
  

⭐️Here是一个样本项目:https://d.pr/f/90CTEh

我在茫然,还有什么我可以试试。有任何想法吗?

答案

我认为这是在界面生成器的约束的一些基本问题。调整窗口的大小使一切都靠不住。此外,你应该在你validateEditing()textDidChange(forBounds:)调用FancyField。我创建了一个示例项目,已经做了你想要的Github什么

写评论,如果你有任何问题。

思考一点点吧,以为我会在这里添加代码的肉。只有真正需要工作的事情,是对的NSTextField更新时,“任务”正在更新。以下是对的NSTextField所需的代码。

public class DynamicTextField: NSTextField 
   public override var intrinsicContentSize: NSSize 
      if cell!.wraps 
         let fictionalBounds = NSRect(x: bounds.minX, y: bounds.minY, width: bounds.width, height: CGFloat.greatestFiniteMagnitude)
         return cell!.cellSize(forBounds: fictionalBounds)
       else 
         return super.intrinsicContentSize
      
   

   public override func textDidChange(_ notification: Notification) 
      super.textDidChange(notification)

      if cell!.wraps 
         validatingEditing()
         invalidateIntrinsicContentSize()
      
   

希望能帮助到你。

以上是关于与可变高度可编辑NSTextFields在MacOS的应用NSTableView的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有颤动的可滚动视图中使用具有可变高度内容的TabView?

如何在带有 Flutter 的可滚动视图中拥有具有可变高度内容的 TabView?

NSTextView/NSTextfields 中的工具提示

如何检查NSString格式是否包含与可变参数相同数量的说明符?

从不同 NIB 上的 NSTextFields 访问 stringValue

ReactJS 用于编辑评论