Вызывайте разные viewControllers по нажатию панели вкладок UITabBarController - PullRequest
0 голосов
/ 14 ноября 2018

Ниже приведено изображение моей UITabBarController структуры в раскадровке.

enter image description here

Прямо сейчас в раскадровке AboutUsViewController(UIViewController) связано с моей вкладкойBarсобытие нажатия кнопки, т.е. если я нажимаю кнопку tabBar, AboutUsViewController открывается, но теперь моя функциональность основана на определенных условиях.Я хочу позвонить ContactRequstViewController вместо AboutUsViewController на тот же щелчок кнопки tabBar.

Ниже приведен мой код для открытия ContactRequstViewController.

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
      if (tabBarController.selectedIndex == 2){
           UIStoryboard *story =  [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
           ContactRequstViewController *contactVC = [story instantiateViewControllerWithIdentifier:@"ContactUsView"];
          [self.navigationController pushViewController:contactVC animated:YES];
      }
}

После написания вышеуказанного кода я не являюсьв состоянии загрузить ContactRequestViewController.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

По моему опыту, иногда мы не используем tabbarVC, потому что он не гибкий, такой как hide , show или change items number .Итак, мы установили навигацию VC как rootVC, вы можете создать View, просто сделайте его похожим на tabbarVC.Это представление более простое в использовании. И вам не нужно заботиться о каком-либо методе делегата или о чем-то еще.ты можешь делать все что хочешь.Вот и все.

0 голосов
/ 14 ноября 2018

Если вы хотите заменить контроллер корневого представления на выбранной вкладке на основе пользовательской логики, попробуйте использовать setViewControllers:animated: метод UITabBarController.

Вы можете сделать что-то вроде этого:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if (tabBarController.selectedIndex == 1 && tabBarController.viewControllers.count > tabBarController.selectedIndex) {
        BOOL shouldShowContactVC = (BOOL)(rand() % 2);
        NSMutableArray *viewControllers = [[tabBarController viewControllers] mutableCopy];
        UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UIViewController *newVC = nil;
        if (shouldShowContactVC) {
            newVC = [main instantiateViewControllerWithIdentifier:@"ContactUsVC"];
        } else {
            newVC = [main instantiateViewControllerWithIdentifier:@"AboutUsVC"];
        }
        if (newVC) {
            [viewControllers replaceObjectAtIndex:tabBarController.selectedIndex withObject:newVC];
            newVC.tabBarItem = viewController.tabBarItem;
            [tabBarController setViewControllers:viewControllers animated:YES];
        }
    }
}
...