【问题标题】:NSTableView doesn't display return value of objectValueForTableColumn methodNSTableView 不显示 objectValueForTableColumn 方法的返回值
【发布时间】:2015-01-02 07:24:53
【问题描述】:

不管我返回什么,表格视图将只显示在 .xib 文件中手动设置的显示文本(NSTextField 的“标题”)。 请帮我弄清楚我做错了什么。谢谢。

我的 NSTableView 只有 1 列。

代码如下:

#import "DeviceSettingsController.h"
#import <ImageCaptureCore/ImageCaptureCore.h>

@interface DeviceSettingsController ()
@property (weak) IBOutlet NSTableView *tableViewScanners;
@property (weak) IBOutlet NSMatrix *checkBoxes;
@property NSMutableArray *availableScanners;
@property ICDeviceBrowser *deviceBrowser;
@end

@implementation DeviceSettingsController

- (void)viewDidLoad {
    [super viewDidLoad];
    _availableScanners = [[NSMutableArray alloc] init];
    _deviceBrowser = [[ICDeviceBrowser alloc] init];
    _tableViewScanners.delegate = self;
    _tableViewScanners.dataSource = self;
    _deviceBrowser.browsedDeviceTypeMask = ICDeviceTypeMaskScanner | ICDeviceLocationTypeMaskLocal | ICDeviceLocationTypeMaskShared | ICDeviceLocationTypeMaskBluetooth | ICDeviceLocationTypeMaskBonjour;
    _deviceBrowser.delegate = self;
    [_deviceBrowser start];    
}

- (id)initWithMainView:(NSView *)_theView AndMainController:(NSViewController *)_theViewController AndNibName:(NSString *)nibName AndArgs:(NSArray *)_args {
    self = [super initWithMainView:_theView AndMainController:_theViewController AndNibName:nibName AndArgs:_args];
    return self;
}

- (void)deviceBrowser:(ICDeviceBrowser *)browser didAddDevice:(ICDevice *)device moreComing:(BOOL)moreComing {
    [_availableScanners addObject:device];
    [_tableViewScanners reloadData];
}

- (void)deviceBrowser:(ICDeviceBrowser *)browser didRemoveDevice:(ICDevice *)device moreGoing:(BOOL)moreGoing {
    [_availableScanners removeObject:device];
    [_tableViewScanners reloadData];
}

- (void)didRemoveDevice:(ICDevice *)device {

}

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

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSString *retVal = [((ICScannerDevice *)[_availableScanners objectAtIndex:row]) name];

    return retVal;
}
@end

【问题讨论】:

  • 看我的回答here

标签: objective-c macos cocoa nstableview nstablecolumn


【解决方案1】:

tableview 内容模式是基于单元格还是基于视图?我假设它是基于视图的,因为您提到了 xib,因此您必须使用 objectValueForTableColumn(Cell Based) 而不是

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row  

另见Apple Docs,所以典型的实现如下

- (NSView *)tableView:(NSTableView *)tableView
   viewForTableColumn:(NSTableColumn *)tableColumn
                  row:(NSInteger)row {

      // Retrieve to get the @"MyView" from the pool or,
      // if no version is available in the pool, load the Interface Builder version
      NSTableCellView *result = [tableView makeViewWithIdentifier:@"MyView" owner:self];

      // Set the stringValue of the cell's text field to the nameArray value at row
      result.textField.stringValue = [self.nameArray objectAtIndex:row];

      // Return the result
      return result;
}

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 2023-03-09
    • 1970-01-01
    • 2023-03-24
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多