Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS加载新故事板_Ios_Storyboard - Fatal编程技术网

iOS加载新故事板

iOS加载新故事板,ios,storyboard,Ios,Storyboard,带有故事板的简单iOS应用程序-故事板a 当iPad改变方向时-我想加载一个新的故事板-故事板B 我该把这种逻辑放在哪里呢 当横向(及其导航)中的UI与纵向(纵向)中的UI不同时,这是一种好的做法。旋转屏幕时的最佳做法是重新显示视图。这就是自动调整尺寸(弹簧和支柱)的全部原因,它已经存在了一段时间,以及新的自动布局功能。在旋转时,您应该能够根据需要使用它来重新组织视图,理想情况下,您应该看到一个平滑的旋转。不鼓励在轮换时销毁和重新创建资源,如UI元素,而在Android世界中,这实际上是首选和默

带有故事板的简单iOS应用程序-故事板a

当iPad改变方向时-我想加载一个新的故事板-故事板B

我该把这种逻辑放在哪里呢


当横向(及其导航)中的UI与纵向(纵向)中的UI不同时,这是一种好的做法。

旋转屏幕时的最佳做法是重新显示视图。这就是自动调整尺寸(弹簧和支柱)的全部原因,它已经存在了一段时间,以及新的自动布局功能。在旋转时,您应该能够根据需要使用它来重新组织视图,理想情况下,您应该看到一个平滑的旋转。不鼓励在轮换时销毁和重新创建资源,如UI元素,而在Android世界中,这实际上是首选和默认方法

通常情况下,如果用户界面在纵向和横向之间在某种程度上有所不同,那么它仍然有很多共同点,因此可能会在横向中显示一个额外的部分,例如,它会隐藏在纵向中。我建议不要在轮换时从根本上改变你的UI,因为这绝对不是标准,而且会让用户感到不安。旋转时,您可以轻松隐藏或显示附加部分,无需太多麻烦

如果必须在旋转时重新创建视图,而不是重新排列视图,则至少可以将它们保留在同一故事板中。仅仅为了这个目的,没有必要使用一个全新的故事板

至于你将把处理这个问题的逻辑放在哪里,如果你决定采用这种方法,这将取决于在轮换时到底需要改变什么。如果每个视图控制器都需要重新创建,则您可以在应用程序委托中处理此问题。但是,如果只是特定的视图控制器,您可能只在这些特定的控制器中使用逻辑来检测和处理这些情况


正如我所说,我强烈反对这种方法,我认为最好使用已经存在的机制在轮换时重新发布您的视图。

您可以通过以下方式注册UIDeviceOrientationIDChangeNotification

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
                             selector:@selector(orientationChanged:)
                             name:UIDeviceOrientationDidChangeNotification
                             object:nil];
在收到上述UIDeviceOrientationIDChangeNotification的通知后,您的orientationChanged:方法将被激发,在该方法中,您可以实现任何您想要实现的布局更改,如下所示:-

在您的私有界面isShowingLandscapeView中创建一个BOOL标志,以跟踪设备当前所在的方向,并相应地采取行动

BOOL isShowingLandscapeView = NO;

- (void)orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation) &&
        !isShowingLandscapeView)
    {
        // Changes pertaining to lanscape orientation here
        isShowingLandscapeView = YES;
    }
    else if (UIDeviceOrientationIsPortrait(deviceOrientation) &&
         isShowingLandscapeView)
    {
        // Changes pertaining to portrait orientation here
        isShowingLandscapeView = NO;
    }
}

您可以按以下方式加载其他情节提要

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"your storyboard" bundle:nil];
UIViewController *initialViewController = [storyboard instantiateInitialViewController];
[[self navigationController] pushViewController:initialViewController animated:YES];

我的故事板有一个简单的UIViewController。此UIViewcontroller的所有控件都在纵向布局的设计时排列。在横向视图中,控件保持不变,但不能用于自动调整大小,因此需要手动放置控件并调整其大小。假设我使用的是故事板而不是xib文件,那么我是否要为横向视图创建一个新的视图控制器呢。没有必要破坏和重建它,而且可能会有问题。如果您已经使用理想的横向布局在另一个故事板中创建了另一个视图控制器,那么您至少可以从中获取所有元素应移动到的值,并将其放入代码中以重新组织它们。您建议以编程方式进行此操作。我想在设计时做。我想知道为什么编程比设计更好。因为你的方法涉及到销毁和重新创建资源,而这不是iOS上的首选方法。但是,如果要执行此操作,一个可能的解决方案可能是在同一视图控制器中有两个单独的视图,其中一个是纵向内容,另一个是横向内容。然后可以隐藏其中一个,并在旋转时显示另一个。要做到这一点,你只需要让两者保持同步,以便一个反映另一个的变化。我的问题不是如何检测方向是否发生了变化。当方向改变时-我想引入一个在设计时创建的视图。当前,此视图位于故事板中。问题是我在哪里设计第二个视图。我不想像@Gavin所建议的那样以编程方式移动所有内容。我想在设计时设置一个视图,然后在发生旋转时将其引入。很抱歉误解了您的问题。您可以为不同的方向创建故事板,并相应地加载它们,否则,如果您的应用程序的部署目标是iOS 6或更大,您可以利用自动布局功能,这似乎是为不同方向设计布局的更好方法。[UIStoryboard storyboard with name:@“Your storyboard”bundle:nil]