- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以我有一个屏幕可以检查某些属性,并且在定义的情况下会立即在 viewDidLoad
中以模态方式加载另一个 View ,没有动画,覆盖当前正在加载的 View (以免以显示下面的 View )。在 iOS 8 之前,完成此操作后,原始 View 将暂停其加载(不会继续 viewWillAppear
、viewDidLayoutSubviews
等),直到覆盖 Controller 被关闭。我发现这种行为适合我的需要,因为原始 View 中元素的任何动画都可以完成。然而,在 iOS 8 中,我得到了一个完全不同的事件链。首先,出于某种原因 viewDidLayoutSubviews
被调用了两次(这是怎么回事?)但更重要的是, View 不喜欢在 viewDidAppear
之前的任何时候弹出另一个 Controller ,提示 开始/结束外观转换的调用不平衡
。不仅如此,底层的 viewController
会继续加载(viewWillAppear
、viewDidLayoutSubviews
等),即使它没有显示,这会导致所有在这些事件中触发的方法。如果 Apple 更新了实现此类目标的方式,我将不胜感激,因此,如果新元是一个完全不同的过程,我愿意采用,但是,我无法让它正常工作。
对于如何让这个模态视图插入而不导致底层 View 继续加载的任何帮助,我将不胜感激。
谢谢,
迈克
更新: 将引入一些代码。下面是主要 viewController
的 viewDidLoad
,如果需要,它会呈现模态 VC。
-(void) viewDidLoad{
if(hasNotSeenTutorial){
TutVC* vc = [[TutVC alloc] initWithNibName:@"tutNib" bundle:nil]
vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self.navigationController presentViewController:vc animated:NO completion:^{
NSLog(@"Has Completed Presentation");
}];
}
}
这就是问题所在。在 viewDidLoad
中调用此处的呈现,导致呈现 VC 的呈现继续。在 iOS 8 之前,呈现的 VC 如果还没有呈现,会暂停,直到模态 VC 被关闭,然后它会像往常一样完成。根据我的原始帖子,在 iOS 8 中情况并非如此。
最佳答案
Apple 在 ios 8 中制定了更严格的规则。举个例子,我将通过这个来阐明我的观点:- 在我的应用程序中,我曾经从导航堆栈中弹出一些 View Controller ,然后,将 a新的,但在 ios7 中从未见过该 pop,似乎只发生了推送转换(从逻辑上讲,应该先看到 pop 然后再推送)。而在 ios 8 中,这件事发生了变化。现在只有在看到并注意到 pop 之后才会看到 push。这严重破坏了用户体验。
我也注意到其他领域的这种严格性,但那些与 UI/UX 无关,所以我现在不会详细介绍。
就您的情况而言,根据我的经验,我可以告诉您,您一直在以错误的方式做事。由于苹果已经严格执行,您的实现似乎中断了。在我看来,唯一的解决方案是移动 viewdidAppear 中的每个检查。
如果您希望继续之前为 ios7 所做的方式,您可以使用此检查:
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
// Code for ios 8 implementation
}
else
{
// Code for ios 7 implementation
}
虽然我会建议您避免,因为您的目标是完全可以实现的。此外,您正在做的事情很容易导致导航堆栈不一致,从而导致应用程序崩溃。
关于iOS 8 viewDidLoad 模态呈现导致多次呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25948707/
我正在学习 objective-c 教程,并注意到 viewDidLoad 中的代码放在 super viewDidLoad 下,而不是第一次调用 viewDidLoad。 代码放在viewDidLo
在Apple的scrollView示例中,他们没有这样称呼。我一直认为这是必须的。我为什么要这样调用它? 最佳答案 如果您要重写该方法,您仍然应该在 super 中调用该方法。即使父类(super c
这个问题已经有答案了: Why/when do we have to call super.ViewDidLoad? (6 个回答) 已关闭 4 年前。 override func viewDidLo
大家好,我有一个双 View Controller 。 我的 firstviewcontroller 有一个按钮,这个按钮发送 NSNotification,secontviewController
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Do I always have to call [super viewDidLoad] in the -v
我有一个关于子类化的问题。 我从我的第一个 View 开始:在我的 .h 文件中: @interface viewAController : UIViewController 在我的 .m 文件中:
我读到一篇文章说,当创建 UIViewController 类时,属性需要为零,然后 Storyboard 或在调用 viewDidLoad 时将其添加到值中。 它表示在构造对象时也无法初始化属性。
这是我当前的代码。我什至没有通过 viewDidLoad 方法覆盖,因为在它说 super viewdidload 的那一行它抛出错误 @interface for uitableview 为选择器
import UIKit class SecondViewController: UIViewController { @IBOutlet weak var labelA: UILabel!
我需要设置和存储一些可用于 View 的 NSUserDefaults 数据。这不适用于 viewDidLoad。 这可以做到吗? 在 viewDidLoad 之前我可以使用什么方法? 你会推荐什么?
当我向主视图 Controller 中的 viewDidLoad 添加方法时,我的 iPhone 应用程序崩溃了: #import "dbQuestionGetterViewController.h"
当用户切换到另一个程序然后再次返回时,原始程序的 View 将被另一个程序的新 View 替换。那么当用户切换回原来的程序时,viewDidLoad会被第二次调用吗? 我问这个是因为如果是这种情况,那
全部, 我正在从我的 applicationDidFinishLaunching 方法创建一个 windowController ... (void)applicationDidFinishLaunc
这个问题已经有答案了: Looking to understand the iOS UIViewController lifecycle (11 个回答) iPhone SDK: what is th
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 5年前关闭。 Improve this
我知道viewDidLoad在 UIViewController 期间可能会多次调用方法的生命周期。但这怎么可能?如何让它多次调用而不是直接调用它?我试过这样做: UIView *view = [
我在使用 iOS 时遇到了一点问题。我使用协议(protocol)在两个 View Controller 之间来回传递数据并手动切换 View 。我的问题是,当我关闭顶 View 时,不再调用底 Vi
我正在开发一款新应用程序,该应用程序主要用于组织网络内容中的信息。它将是一款用于监控道琼斯指数股息 yield 的金融应用程序。为此,需要执行几个步骤,但我现在正在执行第一步。我想选取道琼斯指数中的
我需要采用 viewDidLoad 方法中填充的变量来显示在连接到自定义单元格的标签上。我想做的是: 查找数据库中存储的用户盒子中的 SKU 使用SKU查找数据库中存储的产品详细信息 将产品详细信息存
我正在 viewDidLoad 中使用异步任务函数,根据返回的响应,我正在更改 View (颜色、文本...),但我有“错误”: 有时,当我更改 View 并返回 View 时,我的 View 背景没
我是一名优秀的程序员,十分优秀!