Я не уверен, что я делаю неправильно. Поскольку я не мог найти никаких других вопросов (или даже документации) об этом, кажется, нормально работать без проблем для других людей.
Я просто пытаюсь получить NSTableView, основанный на представлении, для поддержки редактирования его содержимого. То есть приложение отображает NSTableView с одним столбцом и несколькими строками, содержащими NSTextField с некоторым контентом. Я хочу, чтобы (дважды) нажимал на ячейку и редактировал содержимое ячейки. Таким образом, в основном нормальное поведение NSTableView на основе ячейки, где реализован метод tableView:setObjectValue:forTableColumn:row:
.
Я проанализировал пример Complex TableView в примере кода TableViewPlayground от Apple (который поддерживает редактирование содержимого ячеек), но я не могу найти параметр/код/переключатель, который позволяет редактировать.
Вот простой пример проекта (Xcode 6.1.1, SDK 10.10, основанный на раскадровке):
Заголовок:
#import <Cocoa/Cocoa.h>
@interface ViewController : NSViewController
@property (weak) IBOutlet NSTableView *tableView;
@end
Реализация:
#import "ViewController.h"
@implementation ViewController
{
NSMutableArray* _content;
}
- (void)viewDidLoad {
[super viewDidLoad];
_content = [NSMutableArray array];
for(NSInteger i = 0; i<10; i++) {
[_content addObject:[NSString stringWithFormat:@"Item %ld", i]];
}
}
#pragma mark - NSTableViewDataSource
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
return _content.count;
}
#pragma mark - NSTableViewDelegate
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSTableCellView* cell = [tableView makeViewWithIdentifier:@"CellView" owner:self];
cell.textField.stringValue = _content[row];
return cell;
}
- (IBAction)endEditingText:(id)sender {
NSInteger row = [_tableView rowForView:sender];
if (row != -1) {
_content[row] = [sender stringValue];
}
}
@end
Файл раскадровки выглядит следующим образом:
Источник данных и делегат представления таблицы установлены в контроллер представления. При запуске этого приложения в представлении таблицы отображаются 10 тестовых строк, но невозможно редактировать одну из строк.
Почему? Что я пропустил здесь?
Я дважды проверял все атрибуты NSTableView (и его содержимое) таким же, как в примере TableViewPlayground от Apple. И после нескольких часов поиска документации и Интернета для полезных советов без каких-либо успехов, я немного расстроен. Все, что вы можете найти на основе NSTableViews, являются незаменимыми образцами или очень неопределенной информацией о редактируемом контенте. И, конечно, есть тонны информации, документации и образцов для редактируемых, основанных на ячейках NSTableViews...
Почтовый ящик с моим примером проекта можно загрузить здесь: TableTest.zip