【问题标题】:How to bind click action of NSButton in view based NSTableView如何在基于视图的 NSTableView 中绑定 NSButton 的点击动作
【发布时间】:2014-01-14 00:39:48
【问题描述】:

我有一个设置为“基于视图”的NSTableView,每个NSTableCellView 中都有一个NSButton 和一个NSTextField

文本字段正在从数组控制器正确填充。按钮显示正确,但我无法确定如何连接点击操作。

我认为这可以通过从 IB 中的 NSButton 控制拖动到我的控制器中这样的简单方法(在本例中为 NSDocument 子类)来实现:

- (IBAction)testAction:(NSButton *)sender {
    NSLog(@"Test action");
}

它连接良好,但永远不会被解雇。任何想法为什么会这样或如何解决它?

【问题讨论】:

  • 有一个非常好的 4 部分教程youtube.com/watch?v=V0yLZnVFJjw,它向您展示了如何使用按钮构建基于视图的 NSTableView。您将按钮与动作挂钩的想法是正确的。而且您不需要对任何东西进行子类化。但是请检查您的 TableView 委托是否在 IB 中设置为具有 NSTableViewDelegate 的同一类。即,如果我的 AppDelegate 具有 TableView 的委托方法( NSTableViewDelegate ),我会将 IB 中 TableView 的委托设置为 AppDelegate

标签: objective-c xcode macos nstableview


【解决方案1】:

我不明白为什么会这样,但是我遇到了同样的问题,并且能够通过将表委托和数据源分配给 IB 中的文件所有者来使其工作,这也是我的点击处理程序的类。直到那时,它似乎才真正为我的单元格视图中的按钮绑定了单击处理程序。以前我是在加载视图后在代码中设置委托和数据源。

【讨论】:

  • 首先,我验证并且您是正确的 - 它仅在 NSTableView 有委托时才有效。最奇怪的是——如果你设置了 NSTableView 本身的“action”或“doubleAction”——不管有没有委托,它都可以工作。我的感觉是基于View的NSTableView的实现有一个讨厌的苹果BUG。
【解决方案2】:

你必须继承 NSTableCellView 类。将您的 onClick Action 方法放在子类文件中。 如果我不清楚,请告诉我..

【讨论】:

  • 我猜你的意思是NSTableCellView?我对此进行了子类化并将操作方法​​粘贴在那里,但是当我将线从NSButton 拖到此类中的方法时,它没有连接。
  • 是的,我的意思是……在此之前,您是否已将您的子类分配给 IB 中的 TableCellView?你必须把它放在它的身份检查器中。如果它不能解决您的问题,请告诉我
  • 是的,我将这个子类用于包含我的按钮和文本字段的视图。仍然不允许它连接。
  • 确保该按钮是 tableCell 的子视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2013-11-14
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
相关资源
最近更新 更多