Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 带有选项卡栏和导航栏的建议_Iphone_Objective C_Xcode_Uinavigationcontroller_Uitabbarcontroller - Fatal编程技术网

Iphone 带有选项卡栏和导航栏的建议

Iphone 带有选项卡栏和导航栏的建议,iphone,objective-c,xcode,uinavigationcontroller,uitabbarcontroller,Iphone,Objective C,Xcode,Uinavigationcontroller,Uitabbarcontroller,我只是想澄清一下 我有一个应用程序,其中主窗口UI有一个带有3个选项卡的选项卡栏(opt1、opt2、op3)。每个opt都有自己的xib文件,我在其中绘制了自己的接口 在我的app delegate类中,我包含了一个uitabar*rootController,并将其连接到主窗口xib文件中的选项卡栏 现在。。在选项卡栏中,我拖入了3个导航控制器(每个选项1个),在每个导航控制器中,我有1)选项卡栏图标、2)导航栏和3)视图控制器 回到我的app delegate.h类中,我包含了UINavi

我只是想澄清一下

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

在我的app delegate类中,我包含了一个uitabar*rootController,并将其连接到主窗口xib文件中的选项卡栏

现在。。在选项卡栏中,我拖入了3个导航控制器(每个选项1个),在每个导航控制器中,我有1)选项卡栏图标、2)导航栏和3)视图控制器

回到我的app delegate.h类中,我包含了UINavigationController*nav1、nav2、nav3..的代码,并在MainWindow.xib的IB中相应地连接了这些代码(选项卡->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
然后在我的LoginController.m类中,当用户输入正确的凭据时,我调用

[self dismissModalViewControllerAnimated:YES];
在MainWindow.xib中,我将rootController连接到TabBarController。在TabBarController中,我在其中放置了3个NavigationController,并将它们链接到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];
}

但是这并没有打开我的页面视图。xib。。。我已经将它连接到了我的PageViewController类和所有东西上。这个按钮可以工作,因为我已经用UIDialog对它进行了测试。

你看过苹果的编程指南了吗?它们可能会让你更好地理解事物是如何联系在一起的——你可以从这里开始:


在回答你的问题时,这看起来是一个不错的设置方式。不过,我真的建议你读一读:)

作为对你评论的回应,这看起来是一种合理的方式来实现你想要实现的目标。如果它起作用,那么它就起作用了

作为对其他问题的响应,您可以通过以下操作获取导航控制器对象:
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];
- (IBAction)pushNextViewController:(id)sender {
  UIViewController *nextVC = [[MyCustomViewController alloc] initWithNibName:@"MyCustomViewController" bundle:nil];
  [self.navigationController pushViewController:nextVC animated:YES];
}
要将其添加到按钮上的
单击事件中,您需要在interface builder中创建按钮,并在代码中创建
iAction
iAction
可能如下所示:

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

// push it onto the navigation stack
[self.navigationController pushViewController:nextVC animated:YES];
- (IBAction)pushNextViewController:(id)sender {
  UIViewController *nextVC = [[MyCustomViewController alloc] initWithNibName:@"MyCustomViewController" bundle:nil];
  [self.navigationController pushViewController:nextVC animated:YES];
}
然后您需要从interface builder链接到它。我不知道如何做到这一点,我通常不使用interface builder,当然从XCode 3开始就没有使用过它

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

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

要查找以帮助您在internet上查找教程和内容的关键字:iAction uinavigationcontroller pushviewcontroller:animated:popviewcontrolleranimated:

不确定您的问题是什么?在你的应用程序中有一些东西不起作用。你所描述的似乎是做你需要的事情的好方法。如果您需要更多帮助,如果您启动XCode并选择一个新的选项卡栏控制器项目,那么它将为您提供示例布局和各种帮助。我只是想让您放心。它是有效的…但比如说,我在我的opt1 UI中创建了一个按钮,这个按钮链接到一个新视图。如何访问opt1类中的navcontroller(在我的应用程序委托中声明),并告诉它导航到另一个新视图?我只是不知道如何在opt1、opt2、opt3类中使用这些导航控制器…谢谢链接。我现在就通读一遍,看看有没有什么新东西:)谢谢你的全面解释。我知道您可以使用self.navigationController访问nav控制器,但如果我在main window.xib中有3个nab控制器(每个选项卡栏视图有1个nab控制器),那么它如何知道正在访问哪个nab栏?此外,由于某些原因,我无法使用创建UIViewController实例的代码切换视图。该按钮已链接,因为我已使用UIDialog消息对其进行了测试。我忘记了指针,我将编辑问题,这可能就是问题所在。当您在视图控制器中时(例如在
viewDidLoad
方法中),则
self.navigationController
将仅访问视图所连接的导航控制器(如果您理解)。如果您指的是此指针(UIViewController*nextVC)然后我已经试过让它编译…所以我不知道为什么它不工作。没有。这段代码在我的appDelegate中运行良好,可以作为modalViewController加载登录视图。登录后,我会忽略这一点,并显示MainWindow.xib,它有一个选项卡栏,其中有3个视图选项可供切换。在其中一个视图上,我有一个按钮来打开这个新视图(使用上面的代码),但它不工作..hmmstrange-你能在问题中发布你的代码,然后在完成后再次在这里发表评论吗(因此我收到一个通知,你已经发布了你的代码)