XCode TabBar应用程序 - 多个视图?

时间:2011-10-19 11:57:25

标签: iphone xcode tabbar xcode4.2 uinavigation

我一直在努力创建一个底部带有标签的应用,但是能够使用我自己的标签来切换视图,该标签是tabBar应用显示的。

我一直试图找到一个这样的例子但是xcode 4.2(无论是在ios5.0或更早版本上)是不是创建了一个mainwindow.xib,所以我必须找到一种方法来创建这个程序,如下所示:

#import "AppDelegate.h"

#import "HomeViewController.h"
#import "ViewListViewController.h"
#import "ShareViewController.h"
#import "FriendsViewController.h"
#import "SettingsViewController.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize tabBarController = _tabBarController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    UIViewController *homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
    UIViewController *viewListViewController = [[ViewListViewController alloc] initWithNibName:@"ViewListViewController" bundle:nil];
    UIViewController *shareViewController = [[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];
    UIViewController *friendsViewController = [[FriendsViewController alloc] initWithNibName:@"FriendsViewController" bundle:nil];
    UIViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
    self.tabBarController = [[UITabBarController alloc] init];
    [self.tabBarController setDelegate:self];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:homeViewController, viewListViewController, shareViewController, friendsViewController, settingsViewController, nil];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

我的AppDelegate.m中的代码工作正常,我可以完美地切换选项卡。我遇到的问题是我将向页面添加图形并将它们用作按钮在视图之间切换以添加/编辑/删除数据库中的数据(我将不得不学习下一个问题)。

我发现的大多数示例都是使用tabBar启动应用程序,或者使用带有UIViews的uiNavigation来切换。我还没有找到一个能够清楚地展示如何做我想要做的事情的例子。我的方法是错误的创建tabBar应用程序作为我的基础模板,还是可以这样做?每个选项卡可能有多个执行功能的视图,但我需要能够在tabBar框架内创建和切换它们。

提前感谢,

Silver Tiger

- 更新: -

稍微读了一下我现在认为aUINavigationController不是我想要的。我需要的是一种自定义按钮的方式,我创建它以允许我切换视图,因为我将在我的内容中使用的按钮将是图形或透明在图形背景之上。是否可以使用自定义按钮来推送新视图,同时始终保持tabBar可见?我的结构如下

Home
  Add
  Edit
  delete

ViewList - Single page to view list

Share - Single page to send emails / invites

Friends
  Add
  Edit
  Delete

Settings - Single page for app settings/preferences

所以基本上我只有2个选项卡,我将推送新视图,但UINavigationController似乎不适合我正在使用的方法,因为我没有使用单个栏顶部切换视图。

2 个答案:

答案 0 :(得分:1)

UINavigationControllerUITabBarController都是视图控制器的控制器。在此功能中,它们的工作方式相同。但是有一些不同之处。以此为指导:

UINavigationController:在这里,您通常在顶部有一个导航栏。您将其他视图控制器“推”到“堆栈”上,导航控制器负责顶部的所有按钮来回移动以及动画等。通常,但并非总是如此,这是通过表视图实现的。

UITabBarController:这里你总是在底部有标签栏,所以只有当用户通常必须访问的内容无论她在视图中的位置时这都应该有意义层次结构。请查看闹钟应用程序的典型示例。

组合:如果要将两者合并,则从标签栏控制器开始。然后,您可以将单独的导航控制器分配给一个或多个选项卡栏项。导航控制器又管理其视图控制器。确保您的UI不会因屏幕顶部和底部的导航控件而变得混乱。查看iTunes App的典型示例。

顺便说一下,如果一个视图需要更多空间,你可以随时让这些控件消失(例如在iPod应用程序中,当转到“正在播放”时,标签栏会被工具栏替换。)

答案 1 :(得分:0)

This示例结合标签栏和导航栏,从标签栏控制器开始。我发现它非常有用。这是你在找什么?