ios - 在 iOS 上,为什么关闭 View Controller 后紧跟着当前 View Controller 不起作用?

标签 ios uiviewcontroller uikit

以前的代码是

[self presentViewController:aNewViewController animated:YES completion:nil];

selfaNewViewController 是同一个类,因此它是一个通过水平翻转不断呈现新页面(具有不同数据)的页面。

但是由于 presentViewController 以这种方式会导致内存使用越来越多(有点像网络浏览器的后退和前进历史记录越来越多),所以我将代码更改为:

[self.presentingViewController dismissViewControllerAnimated:NO 
          completion:^{
              [self.presentingViewController 
                        presentViewController:aNewViewController
                        animated:YES completion:nil];
}];

但出于某种原因,它只是“返回”到前一个 View Controller 的 View ,而没有转到新 View (aNewViewController)。最初,我将上面的代码放在两条平行线中,一条接一条,然后我将第二行放在第一个调用的完成 block 中。而这两种方法都不会像预期的那样起作用。是否有一些棘手的问题导致它无法进入新的 View Controller ?

还有,以前翻页到新内容的效果很好,现在如果能用,估计会翻回第一页(起始页),再翻到结果页,下次,再次翻到起始页。因为起始页看起来与结果页有很大不同,所以我宁愿它只是继续翻转显示结果页(从一个结果页,翻转到另一个结果页)。如果我把“dismiss”设置为无动画,则不会有翻转动画,但还是会先显示起始页,然后再翻转到结果页。有办法解决吗?

更新: self 在 dismiss 之后真的不复存在了吗? (对象被释放)。上面的代码实际上是在一个类方法中完成的(该类是aNewViewController的同一个类,是结果页面的 View Controller )。为了解决self问题,我尝试先设置一个局部变量

UIViewController *presentingViewController = foo.presentingController;
[presentingViewController dismissViewControllerAnimated:NO 
          completion:^{
              [presentingViewController 
                        presentViewController:aNewViewController
                        animated:YES completion:nil];
}];

(传入foo,值为self)。那么它真的有效!但是,如果它不是类方法而是实例方法怎么办…… self 会不会不复存在了? (如果是在实例方法中,完成 block 会让对象保持事件状态吗?但是在完成 block 之后,谁让对象保持事件状态呢?)我是在类方法中完成的,因为这样起始页就可以调用它呈现此页面的类方法(具有 URL 数据获取逻辑)。

最佳答案

您需要在这两个转换之间添加一些延迟。尝试添加 0.40 的 dealy。像 [self performSelector:@selector(anySelector:) withObject:nil afterDelay:0.40];

关于ios - 在 iOS 上,为什么关闭 View Controller 后紧跟着当前 View Controller 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12600189/

相关文章:

ios - 无法从 NSTextAttachment 创建 NSMutableAttributedString

ios - 是否有任何 API 或 SDK 可用于 iOS 中的 snapchat 集成

objective-c - 为什么 UIViewController 在旋转时不填充窗口,而 UINavigationController 却填充窗口?

ios - 隐藏然后显示导航栏会将 View 移至底部

ios - 编译适用于 iOS 6 和 iOS 7 的应用程序

iphone - bool 参数在 animateWithDuration :animations:completion: 中究竟做了什么

ios - 使用 PhoneGap 和 iOS 时您首选的工作流程是什么?

ios - SceneKit:在 SCNView 的特定位置查找节点的 native 方法?如果不是,使用字典将位置映射到节点?

iOS:Admob 智能横幅不占据全宽

ios - 在具有编程约束的 UIView 中将 UILabel 和 UIImage 居中