Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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 - Fatal编程技术网

Iphone 动态加载视图

Iphone 动态加载视图,iphone,Iphone,案例1: 我已经创建了基于视图的示例应用程序,并尝试执行下面的代码。当我按下“作业列表”按钮时,它应该加载另一个有“返回Btn”的视图 在测试函数中,如果我使用 [self.navigationController pushViewController:jbc animated:YES]; 什么都没装 但是如果我使用 [self presentModalViewController:jbc animated:YES]; 它加载另一个带有“Back Btn”的视图 案例2: 我创建了另一个基于

案例1:

我已经创建了基于视图的示例应用程序,并尝试执行下面的代码。当我按下“作业列表”按钮时,它应该加载另一个有“返回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

答案在于,在基于导航的应用程序中,除模态视图外,所有新视图的父视图控制器都是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];
好吧,恭喜你,谜题不见了