2011-09-14 23 views
0

我想添加一个TabBar到现有的基于视图的应用程序我已经开始只是为了让用户切换到应用程序的其他部分,如“关于”部分和另一部分标题为“保存的搜索”显示导航内容(保存的搜索列表>特定搜索结果>产品详细信息)。有关如何添加UITabBar的任何“非TabBar模板”教程?

任何想法如何做到这一点?我发现的所有教程直接指向TabBar模板。

THX帮助,

斯特凡

回答

1

您可以创建一个新的UITabBarController,并增加它的视图,应用程序窗口的子视图。然后,将其他视图控制器(用于“关于”和“保存的搜索”部分)添加到该标签栏控制器。

这可以在Interface Builder中轻松完成。在您的MainWindow.xib中,将选项卡栏控制器对象拖到画布上。这会自动创建一个带有两个项目的标签栏(每个添加的视图控制器都有一个标签栏)。对于标签栏控制器下的每个视图控制器,转到身份检查器并将其类更改为您的自定义视图控制器子类。然后,显示属性检查器,并有一个字段“NIB名称” - 再次,将其设置为适当的笔尖名称。您的自定义控制器视图将从相应的nib文件中加载。所有剩下要做的就是为Interface Builder中的每个选项卡命名,并给它一个图形。

如果您不喜欢IB,可以通过将自定义视图控制器分配给选项卡控制器的viewControllers属性并分配selectedViewController来以编程方式执行此操作。

希望这会有所帮助。

编辑

想这可能是有益的表现出一点层次!你MainWindox.xib结构可能是这个样子:

  • 的AppDelegate
  • 的UIWindow
  • 的UITabBarController
    • UITabBar
    • AboutViewController(从 “AboutViewController.xib” 加载视图)
      • 标签栏商品 - 关于
    • 的UINavigationController
      • 导航栏
      • SavedSearchesViewController - 根视图控制器(图来自 “SavedSearchesViewController.xib”
      • 标签栏项目加载

,推动从SavedSearchesViewController相应的视图控制器正常提供导航内容。

+0

thx为您的帮助! – Steve

2

您可以与UITabBar应用模板开始,你就会意识到这是很容易做到:

在你UIApplicationDelegate类,在方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

实例化一个UITabBarController这样的:

UITabBarController *tabBar = [[UITabBarController alloc] init]; 

然后,您将设置视图控制器将出现在标签栏上:

tabBar.viewControllers = viewControllers; 

这是一个NSArray你可以事先与UIViewController子类创建:

NSArray *viewControllers = [[[NSArray alloc] initWithObjects:vc1, vc2, vc3, nil] autorelease]; 

在此之后,你只需要设置为窗口的根视图控制器,或将其添加为一个子视图(它具有相同的效果,但第一种方法不工作之前的iOS 4)

self.window.rootViewController = tabBar; 

[self.window addSubView:tabBar.view]; 

然后

[tabBar release]; 

为了实现这一目标,你在你的问题说的那种导航,视图控制器设置的TabBar应该是UINavigationController情况下,这是很容易造成这样的:

UINavigationController *vc1 = [[UINavigationController alloc] initWithRootViewController:firstViewControllerPage]; 

而且在他们里面,你可以把(导航到)其他视图控制器做:

[self.navigationController pushNavigationController:anotherViewController animated:YES]; 

希望这个简短的回顾它使它有点清楚:)

+0

我无法启动它,因为我编了很多代码! – Steve

+0

好吧,我描述了你必须对你的应用程序委托做出的改变! –