首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态加载视图

动态加载视图
EN

Stack Overflow用户
提问于 2010-04-08 11:00:25
回答 3查看 331关注 0票数 0

案例1:

我已经创建了基于视图的示例应用程序,并尝试执行下面的代码。当我按下“工作列表”按钮时,它应该加载另一个带有"Back Btn“的视图。

在test函数中,如果我使用

代码语言:javascript
复制
[self.navigationController pushViewController:jbc animated:YES];

什么都没装上,

但是如果我使用

代码语言:javascript
复制
[self presentModalViewController:jbc animated:YES];

它加载另一个带有"Back Btn“的视图。

案例2:

我创建了另一个基于导航的应用程序,并使用

代码语言:javascript
复制
[self.navigationController pushViewController:jbc animated:YES];

它就像我想要的那样工作。

有人能解释一下为什么它在第一种情况下不起作用吗?这与所选项目的类型有关吗?

代码语言:javascript
复制
@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
EN

回答 3

Stack Overflow用户

发布于 2010-04-08 13:48:56

答案在于,在基于导航的应用程序中,除了模式视图之外,所有新视图的父视图控制器都是UINavigationController。它有一个属性导航栏,而导航栏又有一个属性“后退”按钮。现在,当您在基于导航的应用程序中按下任何视图时,默认情况下,导航栏的左侧会显示一个后退按钮。

现在,在基于视图的应用程序中,没有导航控制器作为您的视图的父视图控制器。在这些类型的应用程序中,视图一个接一个地添加到另一个的顶部。顶视图的行为类似于它下面的视图的子视图。因此没有导航栏的概念,所以没有后退按钮。

我担心您如何能够在基于视图的应用程序中看到模式视图(如果您不是自己添加导航控制器,您可以看到您是否已经自己添加了导航控制器,但是从这里开始的情况将与我在第一点中的情况相同)。

谢谢,

Madhup

票数 0
EN

Stack Overflow用户

发布于 2010-04-08 14:05:37

首先创建根视图控制器,然后使用推视图控制器...

票数 0
EN

Stack Overflow用户

发布于 2010-07-14 15:59:13

最近,我提出了与您的评论相同的问题。我已经解决了这个问题。请确保在使用self navigationController之前,它不是nil。假设'self‘是viewController A,那么你应该处理以下内容:

在你的应用委托中,你应该像这样初始化一个导航控制器:

代码语言:javascript
复制
UINavigationController *m_controller;
 m_controller = [[UINavigationController alloc] initWithRootViewController: viewController A];

然后将导航控制器的视图添加到窗口,并使其可见,如下所示:

代码语言:javascript
复制
[window addSubView:m_controller.view];

最后,记得发布m_controller。

代码语言:javascript
复制
[m_controller release];

最后,下面的代码可以很好地工作:

代码语言:javascript
复制
[self.navigationController pushViewController:jbc animated:YES];

好了,恭喜你,谜题消失了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2597317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档