Я работаю над iOS5 и борется с раскадровки, segues и настраивает виды для разных ориентаций. Пройдя какую-то помощь Apple за последние пару дней; Я не нашел места для своих ответов, я пришел к следующим выводам, которые я сформулирую очень тщательно, и я надеюсь, что кто-то скажет мне, если я прав:Раскадровки, Segues и разные виды для разных ориентаций
1- Использование раскадровки не означает, что вы должны используйте segues (да, это путаница для новичка).
2- Вы можете использовать только сегменты между VC, которые принадлежат навигационному контроллеру.
3 С другой стороны, наличие контроллера навигации необязательно означает, что вы должны использовать переход от одного VC к другому VC (yep!). Поэтому, если вы пытаетесь перейти от одного VC к другому VC (независимо от того, принадлежит ли первый VC к Nav Controller или нет), вы можете сделать следующее:
Предположим, что у вас есть класс WhiteVC и класс YellowVC и вы разместили кнопку на представлении WhiteVC (в раскадровке и изменили класс общего VC на WhiteVC) и связали его с IBAction в классе WhiteVC. Это будет код, который вы бы осуществить в WhiteVC.m, чтобы иметь возможность нажать на эту кнопку и имеют вид YellowVC появляются:
-(IBAction)GoToYellow
{
YellowViewController *YellowVC=[self.storyboard instantiateViewControllerWithIdentifier:@"myYellowVC"];
[self presentViewController:YellowVC animated:YES completion:nil];
}
Для возврата из YellowVC к WhiteVC, вы бы тогда создать другую кнопку по мнению YellowVC (следовать той же процедуре, что и выше) и используйте следующий код:
-(IBAction)ReturnToWhiteVC
{
[self dismissViewControllerAnimated:YES completion:nil];
}
Это распускать YellowVC и вернуться в Белый ВК.
4- Не рекомендуется иметь один VC собственный (экземпляр) нескольких видов - например, для разных ориентаций - лучше иметь отдельный VC для каждого вида. Это нормально, хотя VC создают экземпляр других VC как часть MVC.
5 Теперь все это произошло из-за того, что я создавал приложение с контроллером Nav, но его корень VC будет другим (разные VC с разными видами) в зависимости от того, пейзаж или портрет. Таким образом, я мог бы либо создавать копии VC программно (например, # 3 выше), которые хорошо работали. Или, если бы я хотел, чтобы сделать переход с помощью перетекает, яблоко помощь Docs предоставляет следующий код:
BOOL isShowingLandscapeView;
- (void)awakeFromNib
{
isShowingLandscapeView = NO;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
{
[self performSegueWithIdentifier:@"AlternateView" sender:self];
isShowingLandscapeView = YES;
}
else if (UIDeviceOrientationIsPortrait(deviceOrientation) && isShowingLandscapeView)
{
[self dismissViewControllerAnimated:YES completion:nil];// breakpoint shows that this is triggered
isShowingLandscapeView = NO;
}
}
Приведенный выше код, очевидно, применяется только с контроллером Nav (из-за перетекает), и она работала, когда ориентация изменен с портрета на Пейзаж, но когда я поворачиваюсь назад к портрету, я заканчиваю тем, что пейзаж VC повернут назад к портрету. Что я здесь делаю неправильно?
Надеюсь, кто-то сможет подтвердить/подтвердить эти вопросы и ответить на мой вопрос. Thanks KB.
«2- Вы можете использовать только сегменты между VC, которые принадлежат контроллеру навигации». <- Эта часть неверна. Вы можете переходить между любыми контроллерами представлений в раскадровке. – sobri
У меня такая же проблема. Если я изменю тип segue на контроллере ландшафтного вида на «Модальный», то я не получу описанное вами поведение, но я потеряю навигационную панель, которая не то, что я хочу, но лучше, чем она была до – macgeezer