将视图控制器推入模态视图控制器视图
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];
【讨论】:
以上是关于将视图控制器推入模态视图控制器视图的主要内容,如果未能解决你的问题,请参考以下文章