案例1:
我已经创建了基于View的示例应用程序,并尝试执行下面的代码。当我按下“作业列表”按钮时,它应该加载另一个“Back Btn”的视图。
在测试功能中,如果我使用
[self.navigationController pushViewController:jbc animated:YES];
没有任何东西被加载,
但如果我使用
[self presentModalViewController:jbc animated:YES];
它会加载另一个带有“Back Btn”的视图。
案例2:
我确实创建了另一个基于导航的应用程序并使用了
[self.navigationController pushViewController:jbc animated:YES];
它按我的意愿工作。
有人可以解释为什么它在案例1中不起作用。它是否与选择的项目类型有关?
@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
答案 0 :(得分:0)
答案在于,在基于导航的应用程序中,除了模态视图之外的所有新视图的父视图控制器都是UINavigationController。其中有一个属性导航栏,后者又具有属性后退按钮。现在,当你在基于导航的应用程序中推送任何视图时,默认情况下会在导航栏的左侧显示一个后退按钮。
现在在基于视图的应用程序中,没有这样的导航控制器作为ur视图的父视图控制器。在这些类型的应用程序中,视图逐个添加在另一个的顶部。顶视图的行为与其下方视图的子视图相同。因此没有导航栏的概念,所以没有后退按钮。
我担心你怎么能看到一个模态视图,(如果你不是自己添加一个导航控制器,你可以看看你是否已经自己添加了任何导航控制器,但是情况会是这样的在基于视图的应用程序中放置在我的第一点)。
谢谢,
Madhup
答案 1 :(得分:0)
首先创建你的根视图控制器&然后使用推视图控制器......
答案 2 :(得分:0)
最近,我提出了与你评论相同的问题。我已经解决了。请确保在使用[self navigationController]之前,它不是零。假设'self'是viewController A,那么你应该处理以下内容:
在你的app委托中,你应该像这样初始化一个导航控制器:
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];
嗯,恭喜,这个谜题已经消失了。