将视图控制器推入模态视图控制器视图

Posted

技术标签:

【中文标题】将视图控制器推入模态视图控制器视图【英文标题】:Push view controller into modal view controller view 【发布时间】:2012-10-11 22:48:48 【问题描述】:

我正在尝试做一个简单的操作。至少看起来很简单。好的,我想做的是从使用模态视图控制器推送的视图中推送视图(使用推送视图控制器)。

View1 --(使用模态视图控制器推送)-->View2--(使用推送视图控制器推送)--View3.

现在,我正在做测试,所以我正在使用一个按钮来开始操作。这是我用来从 View2 推送到视图 3 的代码:

//view2.h
UIToolbar *bar;
UIBarButtonItem *button;
UIToolbar *toolbar;



- (IBAction)demissModal:(id)sender;
- (IBAction)goView3:(id)sender;

@end

//view2.m
- (IBAction)goView3:(id)sender

View3 *view_3 = [[View3 alloc] initWithNibName:@"View3" bundle:nil];
[self.navigationController pushViewController:view_3 animated:YES];


这与我用来将 View1 推送到 View2 的代码相同,并且可以正常工作。但是当将 View2 推到 View3 时,它不起作用。知道为什么会这样吗?谢谢!

【问题讨论】:

您需要将视图控制器推送到活动控制器上。看看这是否有效 [self pushViewController:view_3 animated:YES]; 【参考方案1】:

视图控制器实际上并不是“模态”或“推送”视图控制器。 Modal 或 Push 描述了视图控制器之间的转换(如果您使用故事板,则称为 segues)。

我认为您要问的是如何以模态方式呈现视图控制器,然后推送另一个控制器。诀窍是当您以模态方式呈现视图控制器 #1 时,实际呈现一个导航控制器,其根视图控制器设置为视图控制器 #1。

MyViewController *myViewController = [MyViewController alloc] init];
UINavigationController *navController = [UINavigationController alloc] initWithRootViewController:myViewController];

// Presuming a view controller is asking for the modal transition in the first place.
[self presentViewController:navController animated:YES completion:nil];
// Now in myViewController, call [self.navigationController pushViewController:secondViewController animated:YES];

这是使用情节提要的样子:

【讨论】:

好的,这工作但不是很好。当第二个视图显示模态转换时,我看到了必须按下才能更改为 View3 的按钮。如果我按下按钮一次,它会显示与模态转换相同的视图,如果我按下另一个视图,它会显示与奇怪的转换相同的视图。我不知道为什么会这样。 当您按下应该导致推送的按钮时正在运行什么代码?它应该类似于[self.navigationController pushViewController:<#UIViewController#> animated:YES]; 这是我正在使用的代码: View *myViewController = [[View2 alloc] init]; View3 *descripcio = [[View3 alloc]init]; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:View2]; [self presentViewController:navController 动画:YES 完成:nil]; [self.navigationController pushViewController:View3 动画:YES]; 嗯,好的。 View 是什么的子类?它应该是UIViewController 的子类。此外,myViewController 是其实例的类应该由该类分配其内存。以下是使用空白视图控制器的方法:UIViewController *redViewController = [UIViewController alloc] init];redViewController.view.backgroundColor = [UIColor redColor];UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:redViewController];[self presentViewController:navController animated:YES completion:nil]; 在上面的例子中,无论UIViewController子类在redViewController的位置,都应该有一个按钮。如果您在代码中添加该按钮,请使用addTarget:action:forControlEvents: 添加方法。在该方法中,使用self.navigationController pushViewController:animated: 方法。【参考方案2】:

首先,我不确定 gegant_se 是从哪里来的。

其次,如果您从 view1 推送 view2 的方式与从 view2 推送 view3 的方式相同,那么您没有使用模态。

每当您使用导航控制器推送视图控制器时,刚刚推送的视图控制器都会通过 navigationController 属性引用导航控制器。试试这个:

[self.navigationController pushViewController:view_3 animated:YES];

【讨论】:

对不起那个gegant_se。这只是一个测试,我忘了更改它。【参考方案3】:

试试这个:

[self.navigationController pushViewController:view_3 animated:YES];

【讨论】:

【参考方案4】:

试试这个代码 AlarmList 是视图名称。

AlarmListScreen *loscr=[[AlarmListScreen alloc]initWithNibName:nil bundle:nil];

[self.navigationController pushViewController:loscr animated:YES];

[loscr release];

【讨论】:

以上是关于将视图控制器推入模态视图控制器视图的主要内容,如果未能解决你的问题,请参考以下文章

将视图控制器推入导航控制器

将视图控制器推入导航控制器的问题

将相同的视图控制器推入堆栈有奇怪的行为

将模态呈现的视图控制器关闭到不同的底层视图控制器

将 NSMutableArray 从模态视图控制器传递到父视图

如何以模态方式将视图添加到不在视图层次结构中的另一个视图 iOS