Это очень простой NSTableView
с 1 столбцом и строками, состоящими из NSTableCellViews
, которые отображают простую строку и которые я настраиваю программно (без nib / построителя интерфейса).
Я не могу заставить просмотр таблицы отображать строки и не могу понять, почему ?! И когда я ловлю событие выбора строки после отображения таблицы, объект ячейки равен nil?!
Я, должно быть, делаю что-то невероятно глупое, но я не вижу этого. Есть мысли?
@implementation PreferencesSelectorPanel
-(id)initWithWidth:(CGFloat)width
{
self = [super init];
if(self) {
self.translatesAutoresizingMaskIntoConstraints = NO;
self.autoresizesSubviews = YES;
_preferenceTypes = @[@"Settings 1", @"Settings 2", @"Settings 3", @"Settings 4", @"Settings 5"];
_tv = [NSTableView new];
_tv.translatesAutoresizingMaskIntoConstraints = NO;
_tv.autoresizesSubviews = YES;
_tv.focusRingType = NSFocusRingTypeNone;
_tv.delegate = self;
_tv.dataSource = self;
_tv.rowHeight = 40;
_tv.headerView = nil;
_tv.selectionHighlightStyle = NSTableViewSelectionHighlightStyleRegular;
_tv.allowsColumnReordering = NO;
_tv.allowsColumnResizing = NO;
_tv.allowsEmptySelection = NO;
_tv.allowsTypeSelect = NO;
_tv.gridStyleMask = NSTableViewSolidHorizontalGridLineMask;//NSTableViewGridNone;
NSTableColumn *col1 = [[NSTableColumn alloc] initWithIdentifier:@"c1"];
col1.resizingMask = NSTableColumnAutoresizingMask;
[_tv addTableColumn:col1];
[self addSubview:_tv];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(10)-[_tv(200)]-(>=10)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tv)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(10)-[_tv]-(10)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tv)]];
}
return self;
}
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tv
{
NSLog(@"numberOfRowsInTableView");
return _preferenceTypes.count;
}
-(NSView *)tableView:(NSTableView *)tv viewForTableColumn:(NSTableColumn *)tc row:(NSInteger)row
{
NSTextField *tf = [NSTextField
labelWithString:_preferenceTypes[row]];
tf.textColor = [NSColor blackColor];
NSTableCellView *cell = [NSTableCellView new];
cell.textField = tf;
NSLog(@"Row for row %d with label:%@",(int)row, cell.textField.stringValue);
return cell;
}
-(void)tableViewSelectionDidChange:(NSNotification *)notification
{
NSTableCellView *cell = _tv.selectedCell;
NSLog(@"%@", cell.textField.stringValue);
}
@end
Это то, что регистрируется на консоли. Я часами бродил по этому вопросу и уже никуда не попал:
2018-05-11 numberOfRowsInTableView
2018-05-11 Row for row 0 with label:Settings 1
2018-05-11 Row for row 1 with label:Settings 2
2018-05-11 Row for row 2 with label:Settings 3
2018-05-11 Row for row 3 with label:Settings 4
2018-05-11 Row for row 4 with label:Settings 5
2018-05-11 (null)
2018-05-11 (null)
2018-05-11 (null)
Вот что я получаю: