xcode 以编程方式添加 TabBarController

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7319447/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 21:53:21  来源:igfitidea点击:

Adding a TabBarController programmatically

iphoneobjective-ciosxcodetabbarcontroller

提问by Mark

I want to make a tab bar controller and navigation controller programmatically. My code works so far that it shows a tab bar at the bottom, but the OptionViewController doesn't say anything (no title) on the button of the second tab bar. The funny thing is, when i click the button without anything on it, the title appears (and so is his view), can someone explain to me what i am doing wrong? I tried to use the following code:

我想以编程方式制作标签栏控制器和导航控制器。到目前为止,我的代码有效,它在底部显示了一个标签栏,但 OptionViewController 在第二个标签栏的按钮上没有说任何内容(没有标题)。有趣的是,当我点击按钮时没有任何内容,标题出现(他的观点也是如此),有人可以向我解释我做错了什么吗?我尝试使用以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    // Override point for customization after application launch.
    [self.window makeKeyAndVisible];

    NSMutableArray *tabItems = [[NSMutableArray alloc] initWithCapacity:2];

    DefaultViewController *dvc = [[DefaultViewController alloc] init];
    UINavigationController *dvc_nc = [[UINavigationController alloc] initWithRootViewController:dvc];
    [tabItems addObject:dvc_nc];
    [dvc release];
    [dvc_nc release];

    OptionsViewController *ovc = [[OptionsViewController alloc] initWithStyle:UITableViewStyleGrouped];
    UINavigationController *ovc_nc = [[UINavigationController alloc] initWithRootViewController:ovc];
    [tabItems addObject:ovc_nc];
    [ovc release];
    [ovc_nc release];

    UITabBarController *tbc = [[UITabBarController alloc] init];
    tbc.viewControllers = tabItems;
    self.tabController = tbc;
    [tabItems release];
    [tbc release];

    [self.window addSubview:self.tabController.view];

    return YES;
}

回答by rckoenes

You need to set the tabBarItem and title of the UINavigationControllerand not its root viewController.

您需要设置 tabBarItem 和标题,UINavigationController而不是它的根视图控制器。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    // Override point for customization after application launch.
    [self.window makeKeyAndVisible];

    NSMutableArray *tabItems = [[NSMutableArray alloc] initWithCapacity:2];

    DefaultViewController *dvc = [[DefaultViewController alloc] init];
    UINavigationController *dvc_nc = [[UINavigationController alloc] initWithRootViewController:dvc];
    dvc_nc.tabBarItem.title = @"Default";
    dvc_nc.tabBarItem.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Default" ofType:@"png"]];
    [tabItems addObject:dvc_nc];
    [dvc release];
    [dvc_nc release];

    OptionsViewController *ovc = [[OptionsViewController alloc] initWithStyle:UITableViewStyleGrouped];
    UINavigationController *ovc_nc = [[UINavigationController alloc] initWithRootViewController:ovc];
    ovc_nc.tabBarItem.title = @"Option"
    ovc_nc.tabBarItem.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Optiomn" ofType:@"png"]];

    [tabItems addObject:ovc_nc];
    [ovc release];
    [ovc_nc release];

    UITabBarController *tbc = [[UITabBarController alloc] init];
    tbc.viewControllers = tabItems;
    self.tabController = tbc;
    [tabItems release];
    [tbc release];

    [self.window addSubview:self.tabController.view];

    return YES;
}

回答by Anil Gupta

I created the UITabbarControlleras rooview controller of the app with UINavigationControllerfor UIViewController.

我为 UIViewController创建了UITabbarController应用程序的as rooview 控制器UINavigationController

here one more example: I used xibs for View Controllers.

这里再举一个例子:我将 xibs 用于视图控制器。

AppDelegate.m

AppDelegate.m

I create a method name: setupAppHome

我创建了一个方法名称: setupAppHome

#pragma mark - SETUP HOME
-(void) setupAppHome{
    NSLog(@"set up the nano home");

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    if (_chatViewController == nil) {
        _chatViewController = [[ChatViewController alloc] initWithNibName:@"ChatViewController" bundle:nil];
        chatNav = [[UINavigationController alloc] initWithRootViewController:_chatViewController];
        chatNav.tabBarItem.title=@"Chat";
        chatNav.tabBarItem.image=[UIImage imageNamed:@"chat_icon.png"];

    }
    if (_callController == nil) {
        _callController = [[CallViewController alloc] initWithNibName:@"CallViewController" bundle:nil];
        callNav = [[UINavigationController alloc] initWithRootViewController:_callController];
        callNav.tabBarItem.title=@"Call";
        callNav.tabBarItem.image=[UIImage imageNamed:@"call_icon.png"];

    }
    if (_contanctsController == nil) {
        _contanctsController = [[ContactsViewController alloc] initWithNibName:@"ContactsViewController" bundle:nil];
        conNav = [[UINavigationController alloc] initWithRootViewController:_contanctsController];
        conNav.tabBarItem.title=@"Contact";
        conNav.tabBarItem.image=[UIImage imageNamed:@"contact_icon.png"];

    }
    if (_settingController == nil) {
        _settingController = [[SettingViewController alloc] initWithNibName:@"SettingViewController" bundle:nil];
        settingNav = [[UINavigationController alloc] initWithRootViewController:_settingController];
        settingNav.tabBarItem.title=@"Setting";
        settingNav.tabBarItem.image=[UIImage imageNamed:@"setting_icon.png"];

    }

    self.tabController = [[UITabBarController alloc] init];

    NSMutableArray          *controllers = [[NSMutableArray alloc] initWithCapacity:4];
    [controllers addObject:chatNav];
    [controllers addObject:callNav];
    [controllers addObject:conNav];
    [controllers addObject:settingNav];


    self.tabController.viewControllers = controllers;//@[chatNav,callNav,conNav,settingNav];

    self.tabController.selectedIndex=0;



    [self.window setRootViewController:self.tabController];
    [self.window makeKeyAndVisible];


}

It is texted in Xcode 9 with iOS 11.

它在带有 iOS 11 的 Xcode 9 中发短信。

回答by the_pantless_coder

If someone needs a SWIFT version. This worked for me. Thanks @rckoenes for the objC answer I used to translate this from.

如果有人需要 SWIFT 版本。这对我有用。感谢@rckoenes 提供的 objC 答案,我用来翻译它。

    window?.makeKeyAndVisible()

    let dvc = HomeViewController()
    let dvc_nc = UINavigationController(rootViewController: dvc)
        dvc_nc.tabBarItem.title = "Home"
        dvc_nc.tabBarItem.image = UIImage(named: "HomeIcon")
    controllers.append(dvc_nc)

    let ovc = ProfileViewController()
    let ovc_nc = UINavigationController(rootViewController: ovc)
        ovc_nc.tabBarItem.title = "Profile"
        ovc_nc.tabBarItem.image = UIImage(named: "ProfileIcon")
    controllers.append(ovc_nc)

    let tbc = UITabBarController()
        tbc.viewControllers = controllers

    window?.rootViewController = tbc

    UINavigationBar.appearance().tintColor = UIColor(red: 0.05, green: 0.47, blue: 0.91, alpha: 1.0)
    UINavigationBar.appearance().barTintColor = UIColor(red: 0.05, green: 0.47, blue: 0.91, alpha: 1.0)
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent