Используя комбинированный режим контроллера и навигационный контроллер в качестве корневого контроллера окна просмотра поочередно
У меня есть навигационный контроллер, который является корневым контроллером представления моего приложения. это мой главный экран. У меня есть контроллер split view, главный вид которого отображает местоположение, а детальный вид показывает местоположение на карте. Я хотел подтолкнуть контроллер split view к навигационному контроллеру, но он выдал ошибку, сказав, что контроллер split view не может быть подтолкнут к навигационному контроллеру, и это должен быть корневой контроллер представления приложения.
Поэтому я старался изо всех сил.
MyAppDelegate *myappdelegate= [[UIApplication sharedApplication] delegate];
UISplitViewController * vc= [[UISplitViewController alloc] init];
vs.viewControllers = [NSArray arraywithObjects......
....
myappdelegate.window.rootViewController= vc;
Это работает. Это показывает разделенные контроллеры вида без анимации, как и ожидалось. И я делаю те же шаги, когда я закрывал split view controller. я создаю навигационный контроллер с пером главного экрана и устанавливаю это окно делегата моего приложения.снова rootviewController.
И он успешно загружает главный экран снова.
Но я подозреваю, что это правильный путь достижения этой цели. Есть ли более приемлемый способ сделать это?
И я не мог освободить дочерние контроллеры split view controller. я сделал а точка останова на моем методе выпуска дочерних контроллеров. его нельзя было поймать. Я предположил, что когда я устанавливаю корневой контроллер вида моего приложения в качестве навигационного контроллера, старый корневой контроллер вида (split view controller) должен быть выпущен вместе с его дочерними устройствами.
Затем я попытался ниже кода при закрытии split view controller.
UISplitViewController *oldviewcontroller= (UISplitViewController*) myappdelegate.window.rootViewController;
for (UIViewController *child in oldviewcontroller.viewControllers)
{
[child release];
}
//Setting the navigation controller as window.rootviewController again in here.
Этот код выдает ошибку " [UIImageView _ _ viewDidDisappear:]: нераспознанный селектор, отправленный в экземпляр 0x7d...."
Я думаю, что из-за освобождения взгляда уже нет imageview на событии viewdidDisappear.
Короче говоря, мой вопрос заключается в том, правильно ли я использую метод для достижения этой цели? Если да, то как я могу успешно освободить все дочерние контроллеры представления?
1 ответ:
Я наконец нашел способ. Наверное, я нашел ошибку. Я только что срезал ветку, на которой сижу. Я выпускал контроллер вида, в котором я сейчас нахожусь:) Когда вызывается viewdidDisappear, такого контроллера вида нет. Потому что я уже выбрасываю его в космос.Ниже приведены мои рабочие шаги. Надеюсь, это кому-то пригодится. Но я не могу смириться с мыслью о том, что apple может отклонить мое приложение. Я желаю найти подходящий способ.
Это мой рабочий окончательный способ использования разделите контроллер вида и навигационный контроллер как контроллер корневого вида окна поочередно.
Сначала я определил свойство NavigationController и SplitViewController в интерфейсе AppDelegate.
AppDelegate.h @property (assign,nonatomic) UINavigationController * NC; @property (assign,nonatomic) UISplitViewController *SVC;Во-вторых, я назначаю вновь созданный NC на событие AppDelegate didFinishLaunch.
AppDelegate.m //Creating my main screen controller //Creating my navigation controller with my view controller instance. Then self.NC= my_navigation_controller; self.window.rootViewController= self.NC;В-третьих, создание контроллера splitview и настройка в качестве корневого контроллера вида приложения
MyMainScreen.m -(void) OpenSplit() { //Creating my master view controller of SVC //Creating my detail view controller of SVC //Creating my SVC; AppDelegate * app_delegate= [[UIApplication sharedApplication] delegate]; app_delegate.SVC= newly created my SVC; app_delegate.window.rootViewController= app_delegate.SVC; }В-четвертых, высвобождение неиспользуемого NC в событии viewDidLoad детального представления ВПВ.
В-пятых, управление функцией close split view.Я использовал UIBarButton на NavigationBar в DetailView.MyDetailView.m - (void) viewDidLoad() { ... AppDelegate * app_delegate= [[UIApplication sharedApplication] delegate]; app_delegate.NC= nil; //i dont need it now. i am releasing. Releasing Navigation Controller release as well child controllers. I learned with testing. }MyDetailView.m -(void) closeSplitView { //Creating navigation controller with my main screen view controller AppDelegate * app_delegate= [[UIApplication sharedApplication] delegate]; app_delegate.NC= newly_created_NC; app_delegate.window.rootViewController= appdelegate.NC; }Обработка В-шестых неиспользованный контроллер сплит просмотреть в главном событии метод viewDidLoad экране.
MyMainScreen.m -(void) viewDidLoad { AppDelegate * app_delegate= [[UIApplication sharedApplication] delegate]; app_delegate.SVC= nil; //I am releasing it because i am working with NC now. }
Comments