PrepareforSegue在初始视图控件中

时间:2014-01-21 20:36:33

标签: ios uinavigationcontroller uitabbarcontroller

在Storyboard中我将TabBarController设置为初始视图控制器,它将(“视图控制器”关系)连接到导航控制器,导航控制器又连接到视图控制器(iphone5VC)。 如何以编程方式将视图控制器iphone5VC更改为iphone4VC?我必须根据手机大小决定iphone5VC或iphone4VC中的哪一款(iphone4,5)

3 个答案:

答案 0 :(得分:1)

非常感谢你们两位。我最终决定只有一个故事板,并且在3.5屏幕确实需要稍微不同的布局时,在特定的基础上使用特定的viewcontrollers。 我做的是:

在viewcontroller .h文件中添加了<UITabBarControllerDelegate>,用户在TabBar上按下该文件以选择视图。

在.m文件的viewdidLoad中添加:

UITabBarController *tbc = self.tabBarController;
[tbc setDelegate:self];

然后添加到同一个文件中:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    UIStoryboard *myStoryBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    CGSize result = [[UIScreen mainScreen] bounds].size;

    if (tabBarController.selectedIndex == 1)  // button # 2 pressed
    {
        if (result.height == IPHONE4_HEIGHT)
        {
            navController = (UINavigationController *) [myStoryBoard instantiateViewControllerWithIdentifier:@"ViewControlleriphone4"];
            [self presentViewController:navController animated:NO completion:nil];
        }
        else
        {
             navController = (UINavigationController *) [myStoryBoard instantiateViewControllerWithIdentifier:@"ViewControlleriphone5"];
            [self presentViewController:navController animated:NO completion:nil];
        }
    }
}

答案 1 :(得分:0)

如果我正确地阅读了您的问题,您希望在您的应用中包含“检查”,其中结果将设置视图控制器的大小,并且我假设其中包含的视图的布局,基于用户有哪些电话。如果我有正确的话,check out this thread。另外,我强烈建议使用Auto Layout,它会自动将视图放在视图控制器中,而不管屏幕大小和布局(纵向/横向)。

如果我不理解您的问题,可能会粘贴屏幕截图或一些代码。希望这有帮助,祝你好运!

答案 2 :(得分:0)

因此,如果我正确理解你,你真的想加载一个单独的故事板(和相关的viewController),具体取决于设备类型。

如果是这样,你需要做的是让你的主故事板只包含初始的TabBarController,导航控制器和UIViewController的子类,我们将调用dynamicViewController。 dynamicViewController将根据设备类型加载相应的故事板。显然,各种故事板都需要存在(在下面的代码中,故事板被命名为iphoneV4.storyboard和iphoneV5.storyboards)

所以你的dynamicViewController只需要以下 - (void)viewDidLoad方法;

 - (void)viewDidLoad {
    [super viewDidLoad];
    UIViewController __unused * targetViewController = nil;
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    UIStoryboard *targetStoryboard = (screenBounds.size.height == 568) ? [UIStoryboard storyboardWithName:@"iphoneV5" bundle:nil] : [UIStoryboard storyboardWithName:@"iphoneV4" bundle:nil];
    targetViewController = [targetStoryboard instantiateInitialViewController];

    if (self.parentViewController && ![self.parentViewController isKindOfClass:UITabBarController.class] && ![self.parentViewController isKindOfClass:UINavigationController.class]) {
    // replace self with the target view controller
      [self.parentViewController addChildViewController:targetViewController];
      [self.view.superview insertSubview:targetViewController.view aboveSubview:self.view];
      [self.view removeFromSuperview];
      [self removeFromParentViewController];
   } else { // tab bars, nav controllers, and modal dialogs
      [self addChildViewController:targetViewController];
      CGRect f = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
      targetViewController.view.frame = f;
      [self.view addSubview:targetViewController.view];
  }
}