2014-01-21 2 views
0

В Storyboard у меня есть TabBarController, установленный в качестве контроллера начального представления, который соединяет (отношение «контроллер просмотра») к контроллеру навигации, который, в свою очередь, подключается к контроллеру View (iphone5VC). Как можно программно изменить контроллер вида iphone5VC на iphone4VC? Я должен решить, какой из iphone5VC или iphone4VC будет отображаться в зависимости от размера телефона (iphone4, 5)PrepareforSegue в элементе управления начального представления

ответ

0

Если я правильно читаю ваш вопрос, вы хотите включить «чек» в свое приложение, где результат будет задайте размер ваших контроллеров просмотров, и я предполагаю, что макет представлений содержится внутри, на основе того, какой телефон у пользователя. Если у меня это будет правильно, check out this thread. Кроме того, я настоятельно рекомендую использовать Auto Layout, который будет автоматически размещать представления внутри вашего контроллера вида, независимо от размера и макета экрана (портрет/пейзаж).

Если я не понимаю ваш вопрос, возможно, вставьте скриншот или какой-то код. Надеюсь это поможет. Удачи!

+0

Это не только вопрос изменения размера весь вид. Если пользователь iphone равен 5, некоторые мои текстовые изображения могут быть больше, например, и я хочу создать несколько другой viewcontroller с Storyboard, когда устройство является iphone 4. Проблема в том, что мой дизайн, по-видимому, не позволяет мне «поймать» перед тем, как он будет отображаться, и принять решение, которое нужно нажать или представить. – men

+0

А, это имеет смысл. От чтения его/ее кода выше он выглядит как @ MDB983 имеет решение, которое работает, хотя я не тестировал его. – BrianS

0

Так что если я правильно понимаю вас, вы действительно хотите загрузить отдельную раскадровку (и связанный с ней viewController) в зависимости от типа устройства.

Если да, то вам нужно, чтобы ваша основная раскадровка содержала только начальный TabBarController, навигационный контроллер и подкласс UIViewController, который мы будем называть dynamicViewController. DynamicViewController загрузит соответствующую раскадровку на основе типа устройства. Очевидно, что различные раскадровки должны будут существовать (в приведенном ниже кодере раскадровки называются iphoneV4.storyboard и iphoneV5.storyboards)

Таким образом, вашему динамическому контроллеру просто необходим следующий метод (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]; 
    } 
} 
1

Большое спасибо вам обоим. Я, наконец, решил иметь только одну раскадровку и использовать определенные контроллеры view на adhoc основе, когда на экране 3.5 действительно должен быть немного другой макет. Что я сделал:

Добавлено <UITabBarControllerDelegate> в файле viewcontroller .h, с которого пользователь нажимает на TabBar, чтобы выбрать представление.

Добавлено в viewdidLoad файла .m:

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]; 
     } 
    } 
} 
+0

Рад, что вы заработали, и спасибо за отправку кода. – BrianS

Смежные вопросы