Установите корневой ViewController в UISplitViewController из подробного представления

У меня есть UISplitViewController, и я хотел бы изменить контроллер корневого представления (в левой части экрана), когда я нажимаю кнопку в подробном представлении (правая сторона экрана).

Если я сделаю это в подробном представлении:

NextGameViewController *newTableViewController = [[NextGameViewController alloc] init];
NSArray *newVCs = [NSArray arrayWithObjects:newTableViewController, self, nil];
splitViewController.viewControllers = newVCs;

Вылетает с ошибкой:

-[NextGameViewController setParentViewController:]: unrecognized selector sent to instance 0x4938a50

NextGameViewController является подклассом UITableViewController, так почему это происходит? Если я помещаю его в стек контроллера представления из корневого представления, он работает нормально.


person Senior    schedule 15.11.2010    source источник


Ответы (1)


UITableViewController parentViewController является свойством только для чтения. См. этот вопрос SO для более подробного обсуждения. Похоже, вы хотите разместить новое табличное представление в левой части подробного представления, но все еще в корневом представлении, а не заменять сам контроллер корневого представления, как это вы и описываете.

Вы можете использовать массив, который вы пытаетесь заменить, чтобы получить эту информацию. См. эту ссылку о viewControllers для получения дополнительной информации.

Также делегат вашего приложения должен иметь доступ как к корневому каталогу, так и к подробному просмотру. Вы можете получить делегат приложения и использовать свойство delegate.root, чтобы поместить его в стек контроллера, как вы ранее описали. Что-то вроде этого:

MyAppDelegate* del = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
// do what you want with del.root controller here
person slycrel    schedule 16.11.2010
comment
Я хотел бы полностью заменить новый контроллер корневого представления. Я не хочу помещать его в стек и отображать навигацию. - person Senior; 16.11.2010
comment
Если я понимаю, что вы делаете правильно, вы пытаетесь заменить половину UISplitViewController, а не таблицу, которая отображается в корне. Вместо того, чтобы заменять то, что есть, почему бы не скрыть таблицу и не добавить на нее представление? Это упростит возвращение к таблице и, вероятно, будет хорошо работать с возможностями вращения UISplitViewController в портретном режиме. Вы получаете доступ к таблице, но не ко всем функциям корневого представления, а это не просто таблица. Даже если вам это удастся, я не думаю, что он сделает то, что вы ожидаете. - person slycrel; 16.11.2010
comment
Не совсем, я хочу изменить таблицу, но не помещая ее в стек навигации. Я действительно хочу изменить его корень. Почему мне нужно поменять местами представление, а не только контроллер представления? - person Senior; 16.11.2010
comment
На самом деле, поскольку контроллер представления с индексом 0 splitViewController.viewControllers является UINavigationController, я подумал, что смогу изменить корень UINavigationController. Пока не повезло. - person Senior; 16.11.2010
comment
Привет, извини, я идиотка. Я создавал экземпляр NextGameViewController вместо NextGameTableViewController. Это обратная сторона наличия двух классов с одинаковыми названиями! Спасибо за вашу помощь! - person Senior; 16.11.2010
comment
Вы держите пари, рад, что вы обо всем позаботились. знак равно - person slycrel; 16.11.2010