案例1:
我已经创建了基于视图的示例应用程序,并尝试执行下面的代码。当我按下“工作列表”按钮时,它应该加载另一个带有"Back Btn“的视图。
在test函数中,如果我使用
[self.navigationController pushViewController:jbc animated:YES];什么都没装上,
但是如果我使用
[self presentModalViewController:jbc animated:YES];它加载另一个带有"Back Btn“的视图。
案例2:
我创建了另一个基于导航的应用程序,并使用
[self.navigationController pushViewController:jbc animated:YES];它就像我想要的那样工作。
有人能解释一下为什么它在第一种情况下不起作用吗?这与所选项目的类型有关吗?
@interface MWViewController : UIViewController {
}
-(void) test;
@end
@interface JobViewCtrl : UIViewController {
}
@end
@implementation MWViewController
(void)viewDidLoad {
UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(80, 170, 150, 35);
[btn setTitle:@"Job List!" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(test)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
[super viewDidLoad]; }
-(void) test
{
JobViewCtrl* jbc = [[JobViewCtrl alloc] init];
[self.navigationController pushViewController:jbc animated:YES]; //[self presentModalViewController:jbc animated:YES];
[jbc release];
}
(void)dealloc {
[super dealloc];
}
@end
@implementation JobViewCtrl
-(void) loadView
{
self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
self.view.backgroundColor = [UIColor grayColor];
UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(80, 170, 150, 35);
[btn setTitle:@"Back Btn!" forState:UIControlStateNormal];
[self.view addSubview:btn];
}
@end发布于 2010-04-08 13:48:56
答案在于,在基于导航的应用程序中,除了模式视图之外,所有新视图的父视图控制器都是UINavigationController。它有一个属性导航栏,而导航栏又有一个属性“后退”按钮。现在,当您在基于导航的应用程序中按下任何视图时,默认情况下,导航栏的左侧会显示一个后退按钮。
现在,在基于视图的应用程序中,没有导航控制器作为您的视图的父视图控制器。在这些类型的应用程序中,视图一个接一个地添加到另一个的顶部。顶视图的行为类似于它下面的视图的子视图。因此没有导航栏的概念,所以没有后退按钮。
我担心您如何能够在基于视图的应用程序中看到模式视图(如果您不是自己添加导航控制器,您可以看到您是否已经自己添加了导航控制器,但是从这里开始的情况将与我在第一点中的情况相同)。
谢谢,
Madhup
发布于 2010-04-08 14:05:37
首先创建根视图控制器,然后使用推视图控制器...
发布于 2010-07-14 15:59:13
最近,我提出了与您的评论相同的问题。我已经解决了这个问题。请确保在使用self navigationController之前,它不是nil。假设'self‘是viewController A,那么你应该处理以下内容:
在你的应用委托中,你应该像这样初始化一个导航控制器:
UINavigationController *m_controller;
m_controller = [[UINavigationController alloc] initWithRootViewController: viewController A];然后将导航控制器的视图添加到窗口,并使其可见,如下所示:
[window addSubView:m_controller.view];最后,记得发布m_controller。
[m_controller release];最后,下面的代码可以很好地工作:
[self.navigationController pushViewController:jbc animated:YES];好了,恭喜你,谜题消失了。
https://stackoverflow.com/questions/2597317
复制相似问题