【问题标题】:NSCell Subclassing: Draw NSProgressIndicator?NSCell 子类化:绘制 NSProgressIndicator?
【发布时间】:2015-05-11 17:44:02
【问题描述】:

我正在使用基于单元格的 NSTableView。有没有办法创建一个自定义的NSCell 子类并在其中绘制一个 NSProgressIndicator?

类似于:

-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
  [myProgressControl drawOnView:controlView]; //?
}

NSProgressIndicator 本身仅用作状态指示,并且与用户交互(无需单击鼠标等)。

我想坚持使用基于单元格的 NSTableView,因为我使用的是 NSTableViewDataSource。 NSLevelIndicatorCell 是另一种选择,但我更喜欢 NSProgressIndicator 的外观/设计

【问题讨论】:

  • 看起来工作量很大,但是如果你切换到基于视图的 NSTableView,你会获得更多的控制权。您将不得不更好地实现 NSTableViewDataSource 但这是值得的。这样,您将创建更好的细胞。如果您继续使用单元格视图,您将被限制在几个选项中。

标签: macos nscell nsprogressindicator nscontrol


【解决方案1】:

首先,我不确定您所说的“我想坚持使用基于单元格的NSTableView,因为我使用的是NSTableViewDataSource”。基于视图的表格视图和NSTableViewDataSource 之间没有不兼容,尽管有些东西的工作方式略有不同。

无论如何,Apple 有一个示例项目 AnimatedTableView,它显示在基于 NSCell 的表视图中使用进度指示器。这不是通过使用自定义单元类来完成的。相反,进度指示器作为子视图添加到表视图中。在这种东西出现之前,它实际上是基于视图的表格视图的穷人版本。

不用说,我建议您切换到基于视图的表格视图,而不是使用那种复杂的方法。

【讨论】:

  • 使用基于单元的 NSTV 我只需要设置列标识符,这大大简化了事情。使用基于视图的 NSTV 我需要为每列返回一个 NSView。当您以类似数组的方式从 DataSource 请求数据时,DataSource 也将毫无用处。 (DataSource.Items[index])
  • 如果 NIB 中的单元格视图与表格列具有相同的标识符(并且 Xcode 会自动分配两者以匹配,默认情况下),那么您不需要实现委托方法来返回看法。它是自动找到的。因此,与基于NSCell 的表视图相比,没有缺点。我不知道您所说的数据源无用是什么意思。基于视图的表视图使用它与基于NSCell 的表视图相同。唯一不同的地方可能在于单元格视图如何处理它所传递的objectValue,但它可以非常相似地工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多