2014-02-06 4 views
1

Я новичок в кодировании для Mac. Я знаком с UITableView от iOS-кодирования, но не могу заставить NSTableView нормально работать в моем приложении. Да, я просмотрел документацию и учебные пособия, но у меня возникли проблемы с получением нужного результата. Мой желаемый результат должен быть довольно простым и простым, но я стою на TableViews. Мне бы очень хотелось, чтобы он больше походил на работу с UITableView, а не на то, как он, похоже, хочет работать с NSTableView. Я не хочу добавлять или удалять строки. Мне нужен только 1 столбец, и мне бы очень хотелось, чтобы он работал как список кнопок, которые можно нажать, и запустить контент, связанный с этой опцией, на том же экране в следующем NSView.Как получить динамически изменяющийся NSTableView в OSX

(У меня есть 3 вида на одном экране. Первое - это главное меню слева, а при нажатии запускается tableView для отображения подменю. Когда этот параметр выбран, он открывает контент в крайнем правом углу экрана. Мой желаемый результат в любом случае.)

В настоящее время ничего не заполняется таблицей. В настоящее время это выглядит так.

.h

@interface RootViewController : NSViewController <NSTableViewDataSource>{ 
IBOutlet NSView *mainMenuView; 
IBOutlet NSTableView *tableView; 
NSMutableArray *options; 

} 

-(IBAction)mainMenuBtn:(id)sender; 

@end 

.m

@interface RootViewController() 

@end 

@implementation RootViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     options = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 

-(void)viewDidLoad{ 

} 

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

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{ 
    return [[options objectAtIndex:row] valueForKey:[tableColumn identifier]]; 
} 

-(IBAction)mainMenuBtn:(id)sender{ 
    NSLog(@"1"); 
    [options addObject:@"Strain 1"]; 
    NSString *test = [options objectAtIndex:0]; 
    NSLog(test); 
    [tableView reloadData]; 

} 

В настоящее время я Tableview подключен в СИБ к TableView. Я попытался подключить dataSource к владельцу файла, но это не сработало. Кажется, не может найти места, чтобы подключить его тоже. Любые предложения будут ценны. Спасибо

ответ

0

Сначала источник данных NSTableView должен быть подключен к вашему экземпляру RootViewController в Interface Builder или через код. то, что кажется немного подозрительным мне линия:

return [[options objectAtIndex:row] valueForKey:[tableColumn identifier]]; 

Я не знаю, что это значение для [идентификатор TableColumn], но оно должно соответствовать свойству объектов вы добавляете в массив. Я вижу, что объекты, которые вы добавляете, являются строками, поэтому [идентификатор таблицы] должен быть свойством класса NSString. Если вы используете строку в качестве объекта массива, попробуйте использовать это:

return [options objectAtIndex:row]; 
+0

Ну, я сделал настройки, которые вы предложили. Это первое возвращение было чем-то из учебника, но я заменил его, как вы предложили. Я также добавил [options addObject: @ "Strain 1"]; где MutableArray alloc, так что я могу проверить, что таблица отобразит содержимое. Он работает, но при нажатии кнопки таблица не обновляется, как вы ожидали. Какие-либо предложения? Спасибо – steven

+0

Являются ли четыре первые строки mainMenuBtn рабочими? ... конкретно NSLog (test) ...? – Merlevede

+0

На самом деле я думаю, что понял, что происходит, но не знаю, как это исправить. В numberOfRows я добавил NSLog для отображения count. Когда перезагрузка происходит, она вызывает ее снова, но счет остается на 1. Даже если в mainMenuBtn у меня тот же NSLog (что происходит раньше), и в нем указано, что есть 2. Не совсем уверен, что происходит между ними. – steven

Смежные вопросы