NSTableView - переключение между 2 источниками данных - PullRequest
1 голос
/ 12 ноября 2009

У меня есть небольшое приложение какао, и пользовательский интерфейс состоит в основном из одного NSTableView. Однако у меня есть 2 разных списка данных, которые я хотел бы отобразить в нем, а затем просто переключаться между ними. У меня вопрос: как вы думаете, как это лучше всего реализовать?

Теперь я полагаю, что мог бы использовать флаг BOOL для изменения того, какой массив используется в методах dataSource. Но мне также необходимо изменить используемый класс NSCell, поскольку списки содержат совершенно разные объекты данных. Тогда мне нужно будет перезагрузить таблицу (будет ли [таблица reloadData] перезагрузить все это надежно?).

Или я мог бы создать 2 отдельных NSTableViews в моем NIB-файле и переключать их видимость ... Но это кажется хакерским.

У меня довольно хорошее понимание Какао, но я не совсем уверен, как искать что-то подобное, и мне интересно, как другие более опытные разработчики решат эту проблему.

Спасибо.

Ответы [ 3 ]

1 голос
/ 12 ноября 2009

Или я мог бы создать 2 отдельных NSTableViews в моем NIB-файле и переключать их видимость ... Но это кажется хакерским.

Это совсем не хакерство. Хакерски использовать одно и то же табличное представление для нескольких наборов разнородных данных.

Просто создайте таблицу NSTabView с двумя вкладками, поместите одну NSTableView на первой вкладке и другую NSTableView на второй вкладке. Затем вы можете переключаться между представлениями таблицы, вызывая -selectTabViewItemAtIndex: на NSTabView.

0 голосов
/ 12 ноября 2009

Сикстен Отто ответ правильный. Тем не менее, если бы я просто хотел взломать что-то, что сработало, я мог бы сделать что-то подобное:

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  if (dataSourceOne) {
    [self cellForRowAtIndexPathDS1:indexPath];
  }
  else {
    [self cellForRowAtIndexPathDS2:indexPath];
  }
}

, а затем реализовать две версии cellForRowAtIndexPath. Я почти уверен, что метод перезагрузки данных перезагрузит все на экране.

Взломанный, но работоспособный.

0 голосов
/ 12 ноября 2009

Почему бы не иметь отдельные реализации UITableViewDataSource и UITableViewDelegate и не изменять, на какие из них указывает UITableView, когда происходит событие переключения? Похоже, было бы намного чище, чем иметь весь этот условный код в одной реализации. Тот факт, что большинство примеров показывают, что UITableViewController реализует оба этих протокола, не означает, что они не могут быть тремя отдельными объектами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...