Iphone 动态加载视图
案例1: 我已经创建了基于视图的示例应用程序,并尝试执行下面的代码。当我按下“作业列表”按钮时,它应该加载另一个有“返回Btn”的视图 在测试函数中,如果我使用Iphone 动态加载视图,iphone,Iphone,案例1: 我已经创建了基于视图的示例应用程序,并尝试执行下面的代码。当我按下“作业列表”按钮时,它应该加载另一个有“返回Btn”的视图 在测试函数中,如果我使用 [self.navigationController pushViewController:jbc animated:YES]; 什么都没装 但是如果我使用 [self presentModalViewController:jbc animated:YES]; 它加载另一个带有“Back Btn”的视图 案例2: 我创建了另一个基于
[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
答案在于,在基于导航的应用程序中,除模态视图外,所有新视图的父视图控制器都是UINavigationController。它有一个属性导航栏,而导航栏又有属性返回按钮。现在,当您在基于导航的应用程序中按下任何视图时,默认情况下导航栏左侧会显示“后退”按钮 现在,在基于视图的应用程序中,没有像ur视图的父视图控制器那样的导航控制器。在这些类型的应用程序中,视图一个接一个地添加到另一个应用程序的顶部。俯视图的行为与它下面的视图的子视图相同。因此没有导航栏的概念,所以没有后退按钮 我担心您如何才能在基于视图的应用程序中查看模式视图(如果您没有自己添加导航控制器,您可以自己查看是否添加了任何导航控制器,但是从这里看情况与我的第一点相同) 谢谢
Madhup首先创建根视图控制器,然后使用push view controller…最近,我遇到了与您评论相同的问题。我已经解决了。请确保在使用[self-navigationController]之前,它不是零。假设“self”是viewController A,则应处理以下事项: 在应用程序代理中,您应该初始化导航控制器,如下所示:
UINavigationController *m_controller;
m_controller = [[UINavigationController alloc] initWithRootViewController: viewController A];
[window addSubView:m_controller.view];
然后将导航控制器的视图添加到窗口并使其可见,如下所示:
UINavigationController *m_controller;
m_controller = [[UINavigationController alloc] initWithRootViewController: viewController A];
[window addSubView:m_controller.view];
最后,记住释放m_控制器
[m_controller release];
最后,以下代码将很好地工作:
[self.navigationController pushViewController:jbc animated:YES];
好吧,恭喜你,谜题不见了