在某种情况下,我希望在设备方向更改时替换为视图控制器提供的Nib。
这样的事情:
我希望两个Nib文件都归同一个View Controller所有,所以他们对相同的IBActions,IBOutlets等做出反应......
此外,对于这种特定情况,自动布局会有点复杂(我在这里使用的图像只是为了演示问题 - 实际实现更复杂......)。
Apple example for this scenario有问题,因为它使用Segue进行此操作。 例如,如果VC是导航控制器堆栈的一部分,那么对后退按钮点击做出反应就会非常有问题 - 而不仅仅是弹出VC我将不得不使用Pop 2 VC(我认为):
直观地说,我正在考虑更换Nib文件(而不是执行Segue)。
这是一个有效的行动吗?
如果是这样,我应该如何在代码中执行它?
此外,它可以在Storyboard中实现,还是需要使用.xib文件?
答案 0 :(得分:2)
Autolayout si非常适合这种情况,只有"只有"问题是你不能在Storyboard Editor中做,而是在代码中。我真的建议你一本书有一个同样的问题,埃里卡Sadun Autolayout去世了
方法是有不同的约束条件,一个用于横向和一个肖像,交替移除和安装它们,但也许最好的只是改变它们的优先级。
更改xib似乎是一个更容易的解决方案,但在我的opionio中可用的选项较少。
你应该:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duratio
中交换2视图。因为它包含在一个动画块中,你可以在另一个上打开一个alpha并删除看看here
答案 1 :(得分:1)
您可以这样做:
- (void)orientationChanged:(NSNotification *)notification
{
UIDeviceOrientation devOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(devOrientation) && !self.viewIsLandscape ) {
[self presentModalViewController:self.landscapeVC animated:YES];
self.viewIsLandscape = YES;
} else if (UIDeviceOrientationIsPortrait(devOrientation) &&
self.viewIsLandscape)
{
[self dismissModalViewControllerAnimated:YES];
self.viewIsLandscape = NO;
}
}
参考:http://www.edumobile.org/iphone/iphone-programming-tutorials/orientation-changes-for-iphone/
希望这会对你有帮助......
答案 2 :(得分:0)
您可以在单个XIB中创建两个单独的UIView,而不是两个不同的xib。您可以根据方向的变化更改视图。