В Storyboard у меня есть TabBarController, установленный в качестве контроллера начального представления, который соединяет (отношение «контроллер просмотра») к контроллеру навигации, который, в свою очередь, подключается к контроллеру View (iphone5VC). Как можно программно изменить контроллер вида iphone5VC на iphone4VC? Я должен решить, какой из iphone5VC или iphone4VC будет отображаться в зависимости от размера телефона (iphone4, 5)PrepareforSegue в элементе управления начального представления
ответ
Если я правильно читаю ваш вопрос, вы хотите включить «чек» в свое приложение, где результат будет задайте размер ваших контроллеров просмотров, и я предполагаю, что макет представлений содержится внутри, на основе того, какой телефон у пользователя. Если у меня это будет правильно, check out this thread. Кроме того, я настоятельно рекомендую использовать Auto Layout, который будет автоматически размещать представления внутри вашего контроллера вида, независимо от размера и макета экрана (портрет/пейзаж).
Если я не понимаю ваш вопрос, возможно, вставьте скриншот или какой-то код. Надеюсь это поможет. Удачи!
Так что если я правильно понимаю вас, вы действительно хотите загрузить отдельную раскадровку (и связанный с ней 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];
}
}
Большое спасибо вам обоим. Я, наконец, решил иметь только одну раскадровку и использовать определенные контроллеры 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];
}
}
}
Рад, что вы заработали, и спасибо за отправку кода. – BrianS
- 1. Изменение начального представления в раскадровке
- 2. Загрузка начального представления из фреймворка
- 3. Изменение контроллера начального представления для цели
- 4. Настройка начального контроллера представления для панели вкладок
- 5. Изменение начального представления в существующем проекте Xcode
- 6. Нет «Контроллер начального представления» в Xcode 6.2
- 7. Использование prepareForSegue для контроллера табличного представления
- 8. настройка фокуса в одном пользовательском элементе управления на основе действия в другом пользовательском элементе управления
- 9. SWRevealViewController показывает задержку в 10 секунд на контроллере начального представления
- 10. Настройка начального фокуса управления в Silverlight
- 11. Элементы управления C# mvc3 в элементе управления
- 12. iOS - отключитесь до моего начального контроллера представления
- 13. Подключить контроллер начального представления к контроллеру представления табуляции
- 14. Контроллер начального представления и контроллер табуляции
- 15. Удаленный контроллер начального представления из Storyboard
- 16. Установить контроллер начального представления контроллера навигации
- 17. Вернитесь к контроллеру начального представления из класса
- 18. Xcode: контроллер начального представления изменения раскадровки
- 19. Могу ли я изменить элементы управления пользовательского интерфейса для отображаемого контроллера представления в методе prepareForSegue
- 20. Как обрабатывать состояние представления дочерних элементов управления, размещенных на связующем шаблоне, в составном пользовательском элементе управления?
- 21. load viewcontroller в элементе управления вкладкой
- 22. Кнопки в элементе управления gridview
- 23. Содержание в элементе управления пользователем
- 24. обновить значение в элементе управления
- 25. Прокрутка в элементе управления сеткой
- 26. Поиск в элементе управления WebBrowser
- 27. перемещать узлы в элементе управления древовидной структурой
- 28. Использование prepareForSegue в Swift
- 29. Ошибка установки свойства NSNumber контроллера представления назначения в prepareForSegue
- 30. MySql удаление начального и конечного пробелов в элементе выбора
Это не только вопрос изменения размера весь вид. Если пользователь iphone равен 5, некоторые мои текстовые изображения могут быть больше, например, и я хочу создать несколько другой viewcontroller с Storyboard, когда устройство является iphone 4. Проблема в том, что мой дизайн, по-видимому, не позволяет мне «поймать» перед тем, как он будет отображаться, и принять решение, которое нужно нажать или представить. – men
А, это имеет смысл. От чтения его/ее кода выше он выглядит как @ MDB983 имеет решение, которое работает, хотя я не тестировал его. – BrianS