【问题标题】:NSTableView - select row and respond to mouse events immediately [duplicate]NSTableView - 选择行并立即响应鼠标事件[重复]
【发布时间】:2012-11-14 09:13:18
【问题描述】:

我有一个基于视图的 NSTableView,其中的单元格包含许多控件,包括文本字段和编辑字段。例如,当用户尝试单击单元格中的控件以开始编辑文本字段时,将忽略单击的主要目标并选择单元格。然后需要再次单击才能执行最初预期的操作,即使是此单击也会有延迟才会被考虑在内。

如何避免这个问题,并一次性选择行并将鼠标事件转发到控件?

【问题讨论】:

  • 您可以明确地创建第一响应者并接受对 tableview 单元格的点击,然后创建一个将调用您的方法的选择器。

标签: macos cocoa nstableview nstablecellview


【解决方案1】:

遇到了同样的问题。经过一番努力,当我为 IB 中的 Highlight 选项选择 Regular 而不是默认的 Regular(其他选项是 Source List)时,它神奇地起作用了!与此相比,接受的答案似乎更具体,但有点老套。

【讨论】:

  • 这行得通!简单得多。
  • 完美。谢谢!!
  • 这是 StoryBoard 用户最简单的方法。
  • 这只是隐藏了选择。它不允许它立即响应;但是,有一些警告(按钮可能会立即响应 - 仅因为 validateProposedFirstResponder 中的 NSTableViews 代码。
【解决方案2】:

我通过继承 NSTableView 解决了这个问题:

@implementation QuickResponseTableView

- (BOOL)validateProposedFirstResponder:(NSResponder *)responder forEvent:(NSEvent *)event
{
    // This allows the user to click on controls within a cell withough first having to select the cell row
    return YES;
}

@end

【讨论】:

  • 我需要。非常感谢!
  • FWIW,这是正确答案(Corbin,编写了基于视图的 NSTableView )
  • @corbindunn 用“谁编写了基于视图的 NSTableView”说服了我,然后我愉快地继续写了很多其他的东西。然后我注意到我无法再选择一行。一次,但那里的选择会坚持。如果在我单击选择行的地方碰巧有一个 textField,它会立即进入编辑模式。无论如何,我花了几天时间才切换到 Git,但现在我可以自信地说:不要在 validateProposedFirstResponder 上返回 YES:不检查事件发生的位置,例如通过调用 convertPoint:fromView:
  • Elise:这就是 NSTableView 的有效作用。我想我已经在别处写过这个了……但我需要找到那个帖子。
  • @corbindunn 在这里:corbinstreehouse.com/blog/2014/04/…
猜你喜欢
  • 2018-08-19
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多