ios - 来自 viewDidAppear 的 Segue 调用有效,但不是来自 viewWillAppear

标签 ios swift segue

我在给定环境中有以下场景:

Xcode v7.3.1
swift 2

在登录 viewController 中,如果用户已经登录,我最初在 viewWillAppear 方法中有以下 segue 调用以绕过登录屏幕:

  override func viewWillAppear(animated: Bool) {
    if PFUser.currentUser() != nil {
      self.performSegueWithIdentifier("login", sender: self)
    }
  }

segue 没有工作,所以我在进行 segue 调用的地方设置了一个断点,并验证它确实被命中了。我还单步执行调用并验证没有抛出异常,但由于某种原因未执行 segue。

但是,我在 viewDidAppear 方法中进行了相同的调用:

  override func viewDidAppear(animated: Bool) {
    if PFUser.currentUser() != nil {
      self.performSegueWithIdentifier("login", sender: self)
    }
  }

再次,我验证了 segue 调用被命中,但在这种情况下,segue 确实被执行了。所以我想知道为什么完全相同的调用在 viewWillAppear 方法中调用时不起作用,但在 viewDidAppear 中却按预期工作。最令人费解的部分是,似乎正在进行调用,但没有观察到预期的行为。我尝试用谷歌搜索遇到此问题的其他人,但没有找到任何东西。

我想我可以接受从 viewWillAppear 调用它,但是在被重定向之前登录屏幕会短暂出现,这有点烦人。如果有人对我如何通过 viewWillAppear 让它工作有解决方案或建议,我将不胜感激。

最佳答案

您不能在 viewWillAppear 方法中执行转场。这是因为 View 还没有完全出现,它不能过渡到另一个 View 。在这种情况下,如果不应该执行 segue,我会有一个加载图像或类似的东西并让它消失。当然,这将在 viewDidAppear 方法中完成。

关于ios - 来自 viewDidAppear 的 Segue 调用有效,但不是来自 viewWillAppear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37493564/

相关文章:

ios - iOS 是否允许将用户重定向到网站进行付款?

swift - 如何访问 Swift 中 UnsafePointer 引用的结构的成员字段的 UnsafePointer?

ios - 为什么滑动手势识别器会 swift 出错?

ios - 我可以模态呈现作为导航 Controller 一部分的 View Controller 吗?

iphone - 从 Master 到 Detail UITableView,其中第二个具有分组样式

ios - UIView 自动调整大小

ios - 点击 UITextField 时既不会出现键盘也不会出现光标

iphone - 如何在不退出应用程序的情况下显示 YouTube 视频?

ios - 如何在 Swift 中获取联系人全名

ios - 如何使用 Xcode 基于 UItableViewCell 中的手势操作触发 UIViewController segue