Я провел последние несколько часов, пытаясь заставить это работать, и я не могу, поэтому мне нужно знать, правильно ли то, что я пытаюсь сделать. Это сводит меня с ума!
Моя цель - иметь ViewController, который обнаруживает изменение ориентации. Когда это портрет, он показывает представление с UITableView, когда это пейзаж, он показывает UIView с контентом, который я создам программно.
В моем родительском viewcontroller у меня есть:
- (void)viewDidLoad
{
[super viewDidLoad];
TableDataViewController *tableDataController = [[TableDataViewController alloc]
initWithNibName:@"TableDataViewController"
bundle:nil];
self.tableDataViewController = tableDataController;
[self.view insertSubview: tableDataController.view atIndex:0];
[tableDataController release];
}
Это загружает мое представление, содержащее представление таблицы и контроллер, который идет с ним. Затем пользователь поворачивает устройство и функцию:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toOrientation
duration:(NSTimeInterval)duration
{
if (toOrientation == UIInterfaceOrientationPortrait) {
NSLog(@"PerformAnalysisViewController: Gone to Potrait");
}
if ((toOrientation == UIInterfaceOrientationLandscapeLeft) ||
(toOrientation == UIInterfaceOrientationLandscapeRight)) {
NSLog(@"PerformAnalysisViewController: Gone to Landscape");
// Load new view here
CGRect frame = [[UIScreen mainScreen] applicationFrame];
UIView *horizView = [[[HorizView alloc]
initWithFrame:frame] autorelease];
[self setView:horizView];;
}
}
сработает в зависимости. Однако это не срабатывает? Это потому, что управление перешло к Subview, который я вставил в viewDidLoad? Если так, то как мне вернуть его обратно? Нужно ли заставить его определять ориентацию, а затем удалять себя из суперпредставления?
Если бы это работало тогда, будет ли добавлен новый вид, как у меня выше? Я попытался прочитать документацию Apple, но не могу заставить это работать.
Вся помощь очень ценится.
Mike