iOS: как переключаться между альбомным и портретным режимами в раскадровке?

В моем универсальном приложении у меня есть основная деталь в начале. На iPad это просто отображается как разделенный вид, и когда я меняю ориентацию интерфейса, авторазмер работает нормально. Но на iPhone это не работает достаточно хорошо в моем детальном представлении. Поэтому я хочу иметь два разных представления для моего DetailViewController, которые должны иметь одинаковую функциональность, но я не могу заставить его работать должным образом. Я пытался использовать два контроллера представления, но это не помогло. Кстати, я использую раскадровку.

Я думал, что нашел решение, добавив два представления в мой DetailViewController. Затем я просто проверяю текущую ориентацию и устанавливаю недавний вид так:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    Video *currentVideo = [[self.xmlParser videos] objectAtIndex:indexPath.row];

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
        [self.detailViewController setDetailItem:currentVideo];
    else {

        if (!self.detailViewController) {

            DetailViewController *nextController = [self.storyboard instantiateViewControllerWithIdentifier:@"Detail"];
            if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait)
                [nextController setView:nextController.portraitView];
            else
                [nextController setView:nextController.landscapeView];
            [nextController setDetailItem:currentVideo];
            [self.navigationController pushViewController:nextController animated:YES];
        }        
    }
}

Это работает так, как должно, но теперь я столкнулся с другой проблемой. Два представления содержат абсолютно одинаковые выходы, но я могу подключить только выходы одного из них к моему классу DetailViewController. Таким образом, в одной из ориентаций я не могу просматривать свое содержимое должным образом, или мне приходится дважды все кодировать, что именно то, чего я хочу избежать.

У вас есть идеи, как я могу справиться с этой проблемой?

заранее спасибо

1 ответ

Вы можете попробовать добавить два представления в представлении контейнера к контроллеру представления в раскадровке. Размер одного должен быть портретным, другой - пейзажным. Добавьте все необходимые элементы управления для просмотра. Когда ориентация изменится - скрой одну и покажи другую.

Другие вопросы по тегам