从UINavigationController设置UITabBarItem标题?

fuz*_*oat 7 iphone cocoa-touch objective-c

我已经设置了一个带有两个选项卡的UITabBarController,一个是简单的UIViewController,另一个是使用第二个UIViewController作为其rootController的UINavigationController(稍后将用于设置UITableView).我的问题是关于命名选项卡(即设置每个UITabBarItem的标题)

对于第一个选项卡(简单的UIViewController),我在控制器-init方法中添加了以下内容(见下文).

// FROM -[MapController init]
- (id)init {
    self = [super init];
    if(self) {
        UITabBarItem *tabBarItem = [self tabBarItem];
        [tabBarItem setTitle:@"ONE"];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

对于我添加的另一个选项卡(见下文)到第二个控制器init(rootController).

// FROM -[TableController init]
- (id)init {
    self = [super init];
    if(self) {
        UITabBarItem *tabBarItem = [[self navigationController] tabBarItem];
        [tabBarItem setTitle:@"TWO"];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我是否将第二个tabBarItem标题设置在正确的位置,因为当前它没有显示,当我运行应用程序时,第一个选项卡显示"ONE",第二个选项卡为空白.另外tabBarItem(上面)在我打印值或通过调试器查看时显示nil.

EDIT_001:从AppDelegate添加了完整代码

当我第一次创建控制器时,我可以在AppDelegate中正确设置UITabBarItem,准备添加到UITabBarController.但我真的很想在个人控制器中做到这一点 - 整洁的方法.

// UITabBarController
UITabBarController *tempRoot = [[UITabBarController alloc] init];
[self setRootController:tempRoot];
[tempRoot release];
NSMutableArray *tabBarControllers = [[NSMutableArray alloc] init];

// UIViewController ONE
MapController *mapController = [[MapController alloc] init];
[tabBarControllers addObject:mapController];
[mapController release];

// UITableView TWO
TableController *rootTableController = [[TableController alloc] init];
UINavigationController *tempNavController = [[UINavigationController alloc] initWithRootViewController:rootTableController];
[rootTableController release];
[tabBarControllers addObject:tempNavController];
[tempNavController release];

[rootController setViewControllers:tabBarControllers];
[tabBarControllers release];

[window addSubview:[rootController view]];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)

EDIT_002:解决方案到目前为止,在app委托中更新UITabBarItems,例如

// TABLE CONTROLLER
TableController *tableController = [[TableController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:tableController];
[tableController release];
[tabBarControllers addObject:navController];
UITabBarItem *tabBarItem_002 = [navController tabBarItem];
[tabBarItem_002 setTitle:@"TWO"];
[tabBarItem_002 setImage:[UIImage imageNamed:@"GT_TWO.png"]];
[navController release];
Run Code Online (Sandbox Code Playgroud)

EDIT_003: 有没有办法在UINavigationController中设置UITabBarItem,或者委托(看起来像)真的是最好的地方.

Mar*_*uso 10

您实际上必须自己创建tabBarItem,然后将其分配给视图控制器的tabBarItem属性.在init中尝试这个:

UITabBarItem *tabBarItem = [[UITabBarItem alloc] initWithTitle:@"TWO"
                                                         image:[UIImage imageNamed:@"GT_TWO.png"]
                                                           tag:0];
self.tabBarItem = tabBarItem;
[tabBarItem release];
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.