我只想澄清一些事情......
我有一个应用程序,其中主窗口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测试了它
答案 0 :(得分:1)
您是否看过Apple编程指南?他们可能会让你更好地理解一切如何联系在一起 - 你可以从这里开始:
在回答您的问题时,这看起来像是一种可靠的设置方式。我真的建议阅读一下虽然:)
答案 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
事件,您需要在界面构建器中创建按钮,并在代码中创建IBAction
。 IBAction
可能如下所示:
- (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: