将视图推送到当前根视图下方的堆栈中

Posted

技术标签:

【中文标题】将视图推送到当前根视图下方的堆栈中【英文标题】:pushing a view into stack below current root view 【发布时间】:2011-12-13 14:05:20 【问题描述】:

我正在尝试实现一个类似于日历的界面,带有允许用户及时向后滚动/向前滚动的左右箭头。为此,我使用导航控制器,并在堆栈上推送/弹出视图。

但是,如果我当前正在查看根视图,并且如果我试图及时导航回来,我无法弹出视图以获得正确的动画方向怎么办?

上周我在 Stack Overflow 上发现了一篇文章,其中演示了一种方法,其中新视图将被推送到当前根视图下方的堆栈中,从而允许弹出根视图。这只是几行代码——主要是获取堆栈中当前项目的数组,并以某种方式将新视图推到当前活动视图下方。不幸的是,我似乎再也找不到那个特定的帖子了……

有没有人遇到过相同的链接,或者可以为我指出正确的方向?之前我的工作正常,但由于计算机故障,我的工作丢失了一些。

编辑:

通过一些实验,我已经部分工作了......

// create new view controller
ViewController *viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

// add below root        
NSMutableArray *allViews = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
[allViews insertObject:viewController atIndex:0];
[viewController release];

self.navigationController.viewControllers = allViews;
[[self navigationController] popViewControllerAnimated:YES];

[allViews release];

它似乎确实在泄漏内存,但是 - 如果我对 allViews 数组执行 NSLog,每次我及时前进然后返回到前一个视图,它似乎会向数组添加一个额外的视图以后别脱了。这暂时可行,但希望我能解决这个问题。

【问题讨论】:

那段代码在哪里,它在生命周期的哪个方法中?当你弹出时,你会回到哪里,到根或其他地方? 【参考方案1】:

UINavigationController Class Reference 我认为您在谈论@property(nonatomic, copy) NSArray *viewControllers 引用参考:

讨论 根视图控制器位于数组中的索引 0,后视图控制器位于索引 n-2,顶部控制器位于索引 n-1,其中 n 是数组中的项目数。 为该属性分配一个新的视图控制器数组,相当于调用 setViewControllers:animated: 方法,并将动画参数设置为 NO。

这是您要查找的信息吗?


对于你想要做的事情,你可以考虑在UIView 中做一些事情。

transitionFromView:toView:duration:options:completion: 使用给定参数在指定视图之间创建过渡动画。

【讨论】:

朝着正确的方向前进。你能看看我上面的编辑吗?谢谢!

以上是关于将视图推送到当前根视图下方的堆栈中的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewController 没有将视图推送到堆栈上

如何在将数据推送到导航堆栈之前将数据传递给视图控制器并加载它?

Iphone UIView 父方法调用

推送到 UIStoryboard 中的根视图控制器

react-native-navigation ios - 将 UIViewController 推送到导航堆栈

使用当前位置加载 MKMapView