objective-c - 什么会阻止可编辑的 NSTableColumn 双击时可编辑?

标签 objective-c cocoa interface-builder nstablecolumn

我有一个带有单列的NSTableView。该列在 Interface Builder 中选中了“可编辑”,但双击 TableView 中的单元格不会执行任何操作。我已经确认(在 -tableView:viewForTableColumn:row: 中,通过检查 [tableColumn isEditable])表格列设置了可编辑标志。如果 isEditable == YES,什么会阻止列被编辑?

有人建议我包含我的数据源和委托(delegate)代码。 dataArray 是存储 NSManagedObject 子类对象的属性。 listPopupButton 选择要在 NSTableView 中查看的实体,该 NSTableView 可以显示不同的实体,所有这些实体都只有一个 name 属性(如 nameOnlyItems 所示) > 返回这些数组的方法)。

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
  return [[self dataArray] count];
}

- (NSView *)tableView:(NSTableView *)tableView
   viewForTableColumn:(NSTableColumn *)tableColumn
                  row:(NSInteger)row {
  NSTableCellView *cellView;
  NSNumber *index = [NSNumber numberWithInteger:[[self listPopupButton] indexOfSelectedItem]];

  if ([[self nameOnlyItems] containsObject:index]) {
    CVCAbstractEntity *entity = [[self dataArray] objectAtIndex:row];
    NSString *name = [entity name];
    cellView = [tableView makeViewWithIdentifier:@"nameOnly" owner:self];
    [[cellView textField] setStringValue:name];

  } else if ([index integerValue] == CVCListPopUpIndexPublishers) {
    CVCPublisher *publisher = [[self dataArray] objectAtIndex:row];
    NSString *identifier = [tableColumn identifier];
    NSString *content;

    content = [[publisher valueForKeyPath:identifier] description];
    if ([identifier containsString:@"year"] && [content isEqualToString:@"0"]) {
      content = @"";
    }

    cellView = [tableView makeViewWithIdentifier:identifier owner:self];
    [[cellView textField] setStringValue:content ? content : @""];

  } else if ([index integerValue] == CVCListPopUpIndexSeries) {
    CVCSeries *series = [[self dataArray] objectAtIndex:row];
    NSString *identifier = [tableColumn identifier];
    NSString *content;

    content = [[series valueForKeyPath:identifier] description];
    if ([identifier containsString:@"year"] && [content isEqualToString:@"0"]) {
      content = @"";
    }

    cellView = [tableView makeViewWithIdentifier:identifier owner:self];
    [[cellView textField] setStringValue:content ? content : @""];
  }

  return cellView;
}

- (void)tableView:(NSTableView *)tableView sortDescriptorsDidChange:(NSArray *)oldDescriptors {
  NSMutableArray *mutableDataArray = [[self dataArray] mutableCopy];
  [mutableDataArray sortUsingDescriptors:[tableView sortDescriptors]];

  [self setDataArray:mutableDataArray];
  [[self nameOnlyTableView] reloadData];
}

最佳答案

事实证明,不仅表格列需要可编辑,单元格 View 中的文本字段也需要可编辑。选择此文本字段并从“行为”菜单中选择“可编辑”解决了问题。

关于objective-c - 什么会阻止可编辑的 NSTableColumn 双击时可编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20043298/

相关文章:

iphone - 使用 Objective C/Cocoa 从 NSDate 对象中删除时间组件

objective-c - objective-c ::如何检查用户是否已安装您的应用程序?

java - 如何在 Objective-C 中将整数转换为字节

ios - 如果通过 Interface Builder 添加,则无法修改 UIImageView 的框架

c# - UINavigationBar 在键盘打开时被推出屏幕(UITextView)

ios - CGAffineTransformMakeTranslation 除了一个 subview

macos - 基于 View 的 NSTableView 中的 NSPopupButton

objective-c - 在 Cocoa/Objective-C 中获取方法签名的类型编码?

objective-c - 如何在后端将 NSTableView 与 2D 数据绑定(bind)?

objective-c - Objective C NSTextField 在发送命令时保持框中文本突出显示