使用Tab Bar和Nav Bar提供建议

时间:2012-01-05 15:20:10

标签: iphone objective-c xcode uinavigationcontroller uitabbarcontroller

我只想澄清一些事情......

我有一个应用程序,其中主窗口UI有一个带有3个选项卡的选项卡栏(opt1,opt2,op3)。每个opt都有自己的xib文件,我已经绘制了自己的接口。

在我的app委托类中,我已经包含了一个UITabBar * rootController,并将其连接到我的主窗口xib文件中的标签栏。

现在..在标签栏中,我拖动了3个导航控制器(每个选择1个),每个选项里面我有1)标签栏图标,2)导航栏和3)视图控制器。

回到我的应用程序delegate.h类中,我已经为UINavigationController * nav1,nav2,nav3 ...添加了代码,并在MainWindow.xib中的IB中相应地将它们连接起来(TabBar-> navController1,navController2,navController3)。

这是正确的方法吗?另外我如何在opt1,opt2,opt3类文件中使用这些nab条?

这是我的代码: app delegate.h

#import <UIKit/UIKit.h>

@class LoginViewController;

@interface myAppDelegate : NSObject <UIApplicationDelegate>
{

UIWindow *window;
UINavigationController *navigationController1, *navigationController2,     *navigationController3;
IBOutlet UITabBarController *rootController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController1, *navigationController2, *navigationController3;
@property (nonatomic, retain) IBOutlet UITabBarController *rootController;

@end

appdelegate.m

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
[window addSubview:[rootController view]]; 
[window makeKeyAndVisible];

LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];
[self.rootController presentModalViewController:loginViewController animated:NO];

}

然后在我的LoginController.m类中,当用户输入正确的凭据时,我调用

[self dismissModalViewControllerAnimated:YES];

在我的MainWindow.xib中,我将rootController连接到TabBarController。在TabBarController中,我在其中放置了3个NavigationControllers并将它们链接到3个tabOption类,每个类都有自己的.xib视图。

标签栏很好地在3个选项视图之间切换。但是在1 .xib视图中,我有一个按钮来打开一个新的.xib。所以在我的tabOption1类中,我有以下内容:

-(IBAction)openBook:(id)sender{

UIViewController *nextVC = [[PageViewController alloc] initWithNibName:@"PageView" bundle:nil];
[self.navigationController pushViewController:nextVC animated:YES];
}

然而,这并没有打开我的PageView.xib ...我已将它连接到我的PageViewController类,而且所有内容都已连接......并且按钮有效,因为我用UIDialog测试了它

2 个答案:

答案 0 :(得分:1)

您是否看过Apple编程指南?他们可能会让你更好地理解一切如何联系在一起 - 你可以从这里开始:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/NavigationControllers/NavigationControllers.html#//apple_ref/doc/uid/TP40007457-CH103-SW1

在回答您的问题时,这看起来像是一种可靠的设置方式。我真的建议阅读一下虽然:)

答案 1 :(得分:0)

在回应您的评论时,这似乎是您尝试实现目标的合理方式。如果它有效,那么它可以工作。

为了回应您的其他问题,您可以通过以下方式获取导航控制器对象:self.navigationController

所以你可以“转到”这样一个新的视图控制器:

// make the view controller
UIViewController *nextVC = [[MyCustomViewController alloc] initWithNibName:@"MyCustomViewController" bundle:nil];

// push it onto the navigation stack
[self.navigationController pushViewController:nextVC animated:YES];

要将其添加到按钮上的click事件,您需要在界面构建器中创建按钮,并在代码中创建IBActionIBAction可能如下所示:

- (IBAction)pushNextViewController:(id)sender {
  UIViewController *nextVC = [[MyCustomViewController alloc] initWithNibName:@"MyCustomViewController" bundle:nil];
  [self.navigationController pushViewController:nextVC animated:YES];
}

然后您需要从界面构建器链接到它。我不知道如何做到这一点,我通常不使用界面构建器,当然也没有使用过XCode 3。

要以编程方式执行此操作,您可以使用此方法:

[MyButton addTarget:self selector:@selector(pushNextViewController:) forControlEvents:UIControlEventTouchUpInside]; // always use touch up inside

要查找的关键字,以帮助您在互联网上找到教程和内容:ibaction uinavigationcontroller pushviewcontroller:animated:popviewcontrolleranimated: