【问题标题】:How to bring the custom view cell above table rows in NSTableView?如何将自定义视图单元格放在 NSTableView 中的表格行上方?
【发布时间】:2015-10-26 14:15:58
【问题描述】:

当我使用自定义视图作为基于视图的 NSTableView 的单元格时,自定义视图稍微低于表格行。当我单击它时,不会影响元素(例如文本字段)自定义视图,而是选择了表格行(并突出显示)。我必须重新单击以选择文本字段。

- (NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSLog(@"We are creating views!");
    NSTableCellView *newView;
    newView = [tableView makeViewWithIdentifier:@"PostCell" owner:self];


    NSTextField *newTextField = [[NSTextField alloc] init];
    [newView addSubview:newTextField];

    return newView;
}

当我根据NSTableView - Disable Row Selection禁用行选择时,没有选择。

- (BOOL)selectionShouldChangeInTableView:(NSTableView *)tableView {
    return NO;
}

但我仍然无法直接选择文本字段。更糟糕的是,我什至无法使用鼠标选择它。只有键盘上的tab 有效。

上面好像有什么东西。但它是界面生成器中显示的“表格列”吗?还是别的什么?

我该如何解决这个问题?

【问题讨论】:

  • 如何初始化 UITableViewCell? cell.contentView = customView ?如果是,您应该考虑添加视图而不是 [cell.contentView addSubview:customView]
  • @AurélienBouilland,在界面构建器中拖动一个自定义视图,就在表格列的正下方(作为它的子项),将类设置为我的视图类,然后NSTableCellView *newView; newView = [tableView makeViewWithIdentifier:@"PostCell" owner:self];;
  • 您介意放一些您点击的代码或屏幕截图吗?
  • @SruitA.Suk,请查看我的更新。

标签: objective-c cocoa


【解决方案1】:

使用NSTableView 的自定义子类并覆盖-validateProposedFirstResponder:forEvent: 以返回YES

请参阅编写基于视图的表视图代码的 Apple 工程师的this blog entry

【讨论】:

    【解决方案2】:

    确保存在以下代码。

    - (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex {
    return YES; 
    }
    

    您可以尝试记录子视图或者您可以检查视图的超级视图。 这将有助于理解视图层次结构。

    另外,如果视图的 userInteraction 之一被禁用,那么它的子视图将无法接收事件。请验证所有视图及其子视图 userInteraction 是否已启用。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-13
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      相关资源
      最近更新 更多