我想在我的视图中以编程方式在我的标签栏上添加按钮...
我有导航控制器,但它不允许我添加这些.. 我想在我的视图中以编程方式创建...
答案 0 :(得分:12)
由于标签栏控制器是一个容器视图控制器,用于将应用程序划分为两种或多种不同的操作模式,因此大多数应用程序都将导航控制器作为标签栏控制器的子项。
Apple的立场是:
您使用标签栏控制器 你的申请的情况 要么提出不同类型的 数据或呈现相同的数据 显着不同的方式。
这并不是说你不能以不同的方式做事......你的主要问题是你已经在应用程序中放置了一个Nav Controller,并且你想以编程方式创建标签栏控制器。因此,我可以看到这一点的唯一方法是,您不介意每次更改导航控制器中的屏幕时标签栏控制器是否更改。一些应用以这种方式工作。大部分都没有。
如果我的上述假设属实,我建议您重新考虑您的代码,看看您是否想要进行这一开发。如果是这样,您可以轻松创建标签栏控制器并将其附加到当前视图中。
以下是我用于为我的某个应用创建设置的代码:
// set up a local nav controller which we will reuse for each view controller
UINavigationController *localNavigationController;
// create tab bar controller and array to hold the view controllers
UITabBarController *tabBarController = [[UITabBarController alloc] init];
NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:1];
// setup the first view controller (Root view controller)
RootViewController *myViewController;
myViewController = [[RootViewController alloc] initWithTabBar];
// create the nav controller and add the root view controller as its first view
localNavigationController = [[UINavigationController alloc] initWithRootViewController:myViewController];
localNavigationController.navigationBar.barStyle = UIBarStyleBlack;
localNavigationController.delegate = self;
[localControllersArray addObject:localNavigationController];
// release since we are done with this for now
[localNavigationController release];
[myViewController release];
tabBarController.viewControllers = localControllersArray;
tabBarController.moreNavigationController.navigationBar.barStyle = UIBarStyleBlack;
tabBarController.delegate = self;
tabBarController.moreNavigationController.delegate = self;
// release the array because the tab bar controller now has it
[localControllersArray release];
self.tabBarController.selectedIndex = 0;
// add the tabBarController as a subview in the window
[window addSubview:tabBarController.view];
// need this last line to display the window (and tab bar controller)
[window makeKeyAndVisible];
在很多情况下,我觉得以编程方式完成所有操作会更容易。
希望这有帮助。
答案 1 :(得分:0)
您必须保留对标签栏控制器的引用。例如,您可以将其保留在App Delegate ...
中