【问题标题】:Tabbarcontroller add tabs programmaticallyTabbarcontroller 以编程方式添加选项卡
【发布时间】:2014-06-22 14:46:21
【问题描述】:

对于我正在构建的应用程序,我在情节提要中完成了所有视图,并且它使用 tabbarcontrolller 在不同视图之间切换。我有一个视图,我想以编程方式添加到这个已经存在的标签栏,该标签栏已经有三个项目。如何以编程方式添加此选项卡并让其他选项卡通过情节提要。

更多:我按照你说的做了,但是当我添加它仍然只有三个选项卡而不是添加第四个选项卡时没有发生任何事情,这是我为选项卡栏控制器提供的代码

@interface TheTabBarController ()

@end

@implementation TheTabBarController


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    UIViewController *viewController = [[CrewsViewController alloc]init];
    NSMutableArray *tempArray = [self.tabBarController.viewControllers mutableCopy];
    [tempArray addObject:viewController];
    self.tabBarController.viewControllers = tempArray;
}

@end

【问题讨论】:

    标签: ios uitabbarcontroller


    【解决方案1】:

    您可以通过向标签栏控制器的viewControllers 数组中添加一个新控制器来实现此目的。因此,请通过适合您制作控制器的方式来实例化新控制器。标签栏控制器的viewControllers 属性是一个不可变数组,因此您需要从该数组创建一个可变数组,将您的控制器添加到其中,然后将此数组设置为标签栏控制器的viewControllers 数组。

    UIViewController *newController = [[UIViewController alloc] init]; // or however is appropriate to instantiate your controller
    NSMutableArray *tempArray = [self.tabBarController.viewControllers mutableCopy];
    [tempArray addObject:newController];
    self.tabBarController.viewControllers = tempArray;
    

    【讨论】:

    • 我照你说的做了,但什么也没发生,你可以检查一下我是否做错了什么。我在上面发布了标签栏控制器的代码。
    • 我尝试记录 tempArray,但由于某种原因它为空。我不确定,但这与问题有关吗?
    • @user3499627,我假设您是从内容控制器之一而不是标签栏控制器执行此操作。您需要将 self.tabBarController 替换为 self (self.tabBarController 在标签栏控制器内将为零)。
    【解决方案2】:

    试试这个:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UIViewController *view1 = [[UIViewController alloc] init];
        UIViewController *view2 = [[UIViewController alloc] init];
        UIViewController *view3 = [[UIViewController alloc] init];
    
        NSMutableArray *tabViewControllers = [[NSMutableArray alloc] init];
        [tabViewControllers addObject:view1];
        [tabViewControllers addObject:view2];
        [tabViewControllers addObject:view3];
    
        [self setViewControllers:tabViewControllers];
        //can't set this until after its added to the tab bar
        view1.tabBarItem = 
          [[UITabBarItem alloc] initWithTitle:@"view1" 
                                        image:[UIImage imageNamed:@"view1"] 
                                          tag:1];
        view2.tabBarItem = 
          [[UITabBarItem alloc] initWithTitle:@"view2" 
                                        image:[UIImage imageNamed:@"view3"] 
                                          tag:2];
        view3.tabBarItem = 
          [[UITabBarItem alloc] initWithTitle:@"view3" 
                                        image:[UIImage imageNamed:@"view3"] 
                                          tag:3];      
    }
    

    【讨论】:

      【解决方案3】:

      swift4:

      func viewDidLoad() {

      super.viewDidLoad()
      let view1 = UIViewController()
      let view2 = UIViewController()
      let view3 = UIViewController()
      var tabViewControllers = [AnyHashable]()
      tabViewControllers.append(view1)
      tabViewControllers.append(view2)
      tabViewControllers.append(view3)
      if let aControllers = tabViewControllers as? [UIViewController] {
          viewControllers = aControllers
      }
      
      //can't set this until after its added to the tab bar
      
      `view1.tabBarItem = UITabBarItem(title: "view1", image: UIImage(named: "view1"), tag: 1)
      view2.tabBarItem = UITabBarItem(title: "view2", image: UIImage(named: "view3"), tag: 2)
      view3.tabBarItem = UITabBarItem(title: "view3", image: UIImage(named: "view3"), tag: 3)
      

      }

      【讨论】:

        猜你喜欢
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-24
        相关资源
        最近更新 更多