Это старый пост, но я нашел полезным помочь мне думать по-другому, и именно так я решил проблему.
Я создал splitViewController
программно. Затем я пометил его номером и просто добавил в качестве подпредставления к моему текущему виду.
FirstViewController* firstView = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];
SecondViewController* secondView = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];
UISplitViewController* splitVC = [[UISplitViewController alloc] init];
[splitVC setDelegate:secondView];
splitVC.viewControllers = [NSArray arrayWithObjects:firstView, secondView, nil];
splitVC.view.tag = 99;
[self.view addSubview:splitVC.view];
После этого отображается splitView
, но чтобы избавиться от него, я должен удалить его из представления, поэтому я создал уведомление между viewcontrollers
. В главном окне контроллера я добавил наблюдателя. (примечание: контроллер основного вида не является splitViewController
или одним из его представлений, это контроллер представления, который загружает splitViewController
)
NSNotificationCenter *splitViewObserver = [NSNotificationCenter defaultCenter];
[splitViewObserver addObserver:self selector:@selector(removeSplitView) name:@"removeSplitView" object:nil];
в селекторе "removeSplitView
" я помещаю все подпредставления моего текущего представления в цикл for, ищу объект класса UIView с тегом 99 и удаляю его из суперпредставления.
NSArray *subviews = [self.view subviews];
for (int i = 0; i < [subviews count]; i++) {
if ([[subviews objectAtIndex:i] isKindOfClass:[UIView class]]) {
UIView *tempView = [subviews objectAtIndex:i];
if (tempView.tag == 99) {
[[subviews objectAtIndex:i] removeFromSuperview];
}
}
}
В firstView у меня есть метод с именем done, который отправляет уведомление, которое наблюдает основной ViewController
.
-(IBAction) done:(id)sender {
[fileSelectedNotification postNotificationName:@"removeSplitView" object:self];
}
Вам также необходимо создать fileSelectedNotification
где-нибудь в вашем приложении. Я сделал это через viewDidLoad
. Похоже на это.
fileSelectedNotification = [NSNotificationCenter defaultCenter];
Я, конечно, также добавил это
NSNotiicationCenter *filesSelectedNotification;
в .h файл этого viewController
.
Таким образом, когда я нажимаю кнопку «Готово» (которая является кнопкой в моем приложении), она удаляет splitViewController
из поля зрения.
Работает нормально. Я получил все это только от чтения документов.