3

我想在我的视图中以编程方式将按钮添加到我的标签栏...

我有导航控制器,但它不允许我添加这些......我想在我的视图中以编程方式创建......

4

2 回答 2

13

由于标签栏控制器是一个容器视图控制器,用于将应用程序划分为两种或多种不同的操作模式,因此大多数应用程序都将导航控制器作为标签栏控制器的子级。

苹果的立场是这样的:

在应用程序呈现不同类型的数据或以明显不同的方式呈现相同数据的情况下,您可以使用标签栏控制器。

这并不是说你不能做不同的事情......你的主要问题是你已经在应用程序中放置了一个导航控制器,并且你想以编程方式创建标签栏控制器。因此,我可以看到的唯一方法是,您不介意每次更改导航控制器中的屏幕时标签栏控制器是否会更改。一些应用程序以这种方式工作。大多数没有。

如果我上面的假设是正确的,我建议你重新考虑你的代码,看看你是否想继续这条开发线。如果是这样,您可以轻松地创建一个标签栏控制器并将其附加到当前视图中。

这是我用来为我的一个应用程序创建设置的代码:

// 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];

在很多情况下,我觉得以编程方式完成所有事情会更容易。

希望这可以帮助。

于 2010-07-10T23:19:58.407 回答
0

您必须保留对标签栏控制器的引用。例如,您可以将其保存在 App Delegate 中...

于 2010-07-10T22:59:02.810 回答