iPhone - Альтернативный пейзаж Просмотр вопроса - PullRequest
0 голосов
/ 11 февраля 2011

У меня проблема с альбомным режимом, и я не могу найти выход.По сути, у меня есть приложение панели вкладок и на первой вкладке у меня есть контроллер навигации.В этом контроллере навигации первое представление содержит таблицу с элементами, а после щелчка по элементу выдвигается подробное представление с описанием элемента.

Мне нужно реализовать альбомный режим как для списка, так и для подробного просмотра, но для просмотра списка мне нужно использовать другой контроллер представления для ландшафтного режима (как правило, что-то вроде потока обложек).Детальный вид просто меняет ориентацию, и в этом случае нет необходимости использовать альтернативный контроллер вида.

Я пытался добиться такого поведения путем реализации контроллера модального представления для контроллера представления списка, в соответствии с примером альтернативных представлений Apple.Это прекрасно работает, когда я в виде списка (когда я перевожу устройство в альбомный режим, контроллер представления обложки отображается правильно).Проблема возникает, когда я показываю подробный вид.Когда я меняю ориентацию устройства, снова появляется поток обложки.Я ожидал, что поток обложек будет представлен только в том случае, если на экране будет вид списка.Кажется, что модальный контроллер вида всегда виден независимо от того, какой VC в настоящее время находится в стеке NC.

Мне кажется, что представление модального VC в качестве ландшафтного вида для конкретного VC не работает для нескольких уровней навигации.

Я также попытался добавить ландшафтный вид в качестве подпредставления в представление контроллеров представления.При использовании этого решения у меня нет проблем с уровнями навигации, но проблема здесь в том, что панель вкладок не скрыта в ландшафтном режиме.Мне нужно скрыть панель вкладок для потока обложек, что достигается путем представления модального VC.

Я буду признателен за любую помощь в этом вопросе.

Большое спасибо!

1 Ответ

0 голосов
/ 11 февраля 2011

В контроллере детального вида вы можете полностью настроить другое представление, используя что-то вроде этого (код из моего недавнего проекта):

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toOrientation 
                                duration:(NSTimeInterval)duration
{
    if ([graphView superview]) {
        if (toOrientation == UIInterfaceOrientationPortrait ||
            toOrientation == UIInterfaceOrientationPortraitUpsideDown) {
            [graphView removeFromSuperview];
        }
    } else {
        if (toOrientation == UIInterfaceOrientationLandscapeLeft ||
            toOrientation == UIInterfaceOrientationLandscapeRight) {
            [[self view] endEditing:YES];
            [[self view] addSubview:graphView];
        }       
    }
}

А теперь, чтобы скрыть панель вкладок, когда вы находитесь в альбомной ориентации (немного взломать, но работает):

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    UIInterfaceOrientation toOrientation = self.interfaceOrientation;

    if ( self.tabBarController.view.subviews.count >= 2 )
    {
        UIView *transView = [self.tabBarController.view.subviews objectAtIndex:0];
        UIView *tabBar = [self.tabBarController.view.subviews objectAtIndex:1];

        if(toOrientation == UIInterfaceOrientationLandscapeLeft ||
           toOrientation == UIInterfaceOrientationLandscapeRight) {                                     
            transView.frame = CGRectMake(0, 0, 480, 320 );
            tabBar.hidden = TRUE;
        }
        else
        {                               
            transView.frame = CGRectMake(0, 0, 320, 480);         
            tabBar.hidden = FALSE;
        }
    }
}

Для этого проекта я добавил представление с именем «graphView», которое я хотел бы отображать тогда и только тогда, когда он находится в ландшафтном режиме, а затем я хотел скрыть панель вкладок. Я думаю, это похоже на то, что вы ищете.

Единственная потенциальная проблема, которую я предвижу, заключается в том, что если вы перейдете в ландшафтный режим до того, как будет отображен подробный вид, все может стать непонятным. Поэтому вы можете использовать эти методы в контроллере представления списка. Эта конкретная проблема никогда не возникала для меня, но я подумал об этом прежде, чем понял, что это спорный вопрос.

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