performSegueWithIdentifier 未从展开 segue 触发

Posted

技术标签:

【中文标题】performSegueWithIdentifier 未从展开 segue 触发【英文标题】:performSegueWithIdentifier not firing from unwind segue 【发布时间】:2015-10-06 03:59:46 【问题描述】:

以前可以使用 Swift 1 的代码,但现在不能使用,这是我的问题。 (确实检查了其他问题,但这略有不同,足以使其他解决方案不起作用。

所以我试图呈现一个登录屏幕,我按照以下方式进行操作

它工作正常,用户输入他们的用户名和密码。然后我以编程方式检查他们是否可以登录并且一切正常,然后按如下方式进行放松:

self.performSegueWithIdentifier("unwindGoToTeamPage", sender: self)

但即使调用了 func,以下代码也不会触发。我知道,因为我在他们的调试中有一个打印语句,它显示在控制台上:

@IBAction func unwindGoToTeamPage(sender: UIStoryboardSegue)
    print("In here")
    self.performSegueWithIdentifier("goToTeamPage", sender: self)
    

现在我知道它与在 ViewController 生命周期开始时不能调用 a 的原因相同

self.performSegueWithIdentifier("goToTeamPage", sender: self)

因为它不会在

override func viewDidLoad() 
        super.viewDidLoad()
    

或者

 override func viewWillAppear(animated: Bool) 
    

但仅限于

override func viewDidAppear(animated: Bool) 
        if appDelegate.tkData[0] == "1"
        
            self.performSegueWithIdentifier("goToTeamPage", sender: self)
        
    

在 Swift 1 和 Objective-C 中,我曾经放入一个计时器,一切都很好,但它不再起作用,我更喜欢放入一个不是 hack 的可靠解决方案。我认为解决方案涉及等到登录视图控制器完全解除,但不确定实现它的正确方法。

调度到主队列是否是一种选择。如果有人有答案并发布更新,我会在等待时尝试。我还注意到它在 iPhone 或 iPod 上运行良好,但在 iPad 上问题未解决。

感谢任何解决此问题的指针。谢谢

更新,是的,我确实尝试了 UITextField 解决方案,但在这种情况下这似乎不是问题。我正在慢慢将问题确定为一个视图控制器在

之前尚未完成
 self.performSegueWithIdentifier("goToTeamPage", sender: self)

火灾。

我也很抱歉我没有提到控制台消息,它是: 警告:尝试在 当前视图控制器> 上显示 新视图控制器>,其视图不在窗口层次结构中!

所以我看到我的问题是需要以某种方式运行登录视图控制器,以便让原始视图控制器收到登录视图控制器已完成的消息,然后才触发

 self.performSegueWithIdentifier("goToTeamPage", sender: self)

所以有没有办法得到某种回调来告诉原始视图控制器子视图控制器已经完全完成,所以我只能在子视图控制器完成后调用下一个函数。

感谢您对此的任何帮助。

【问题讨论】:

能否请您检查this thread 是否解决了您的问题。 谢谢 Abhinav,不,因为我没有 UITextField 问题。我确实查看了这些问题并尝试了解决方案,但没有帮助。 用更多信息更新了我的问题,以防万一 您是否在要执行 segue 的 VC 之上呈现登录 VC?如果是这样,那么为什么不使用完成块呢?如果你可以分享你项目的 GitHub 链接,我可以看看。 尚未在 github 上注册,但您的解决方案是正确的,因为我需要简单地实现一个完成块。我正在尝试查找示例代码以使用不确定如何实现它,但现在试图弄清楚。如果您有一个示例链接将不胜感激,否则我将继续研究这个问题。再次感谢 【参考方案1】:

我有这样的工作,但觉得它真的只是另一个黑客,虽然这次会让我摆脱麻烦,但我很失望我找不到正确的方法。

所以问题主要在于登录屏幕的模态表示,一旦它被关闭,它需要许多微秒才能从视图层次结构中删除。尝试使用

移动到另一个视图控制器
self.performSegueWithIdentifier("goToTeamPage", sender: self)

行不通,这是我的两难选择。

为了解决这个问题,我将登录屏幕设为全屏(不是弹出窗口或模态),然后输入代码

self.performSegueWithIdentifier("goToTeamPage", sender: self)

override func viewDidAppear(animated: Bool)   
     self.performSegueWithIdentifier("goToTeamPage", sender: self)        

功能。

不是最好的解决方案,因为登录屏幕现在是全屏的,虽然在 iphone 上还可以,但在 iPad 上不是最好的。

所以,有点固定,但作为一种黑客和解决方法,如果有人有一个解决方案,我可以返回到登录屏幕的模态视图,我仍然很感兴趣。

【讨论】:

以上是关于performSegueWithIdentifier 未从展开 segue 触发的主要内容,如果未能解决你的问题,请参考以下文章

performSegueWithIdentifier 出现运行时错误,为啥?

iOS8 performSegueWithIdentifier 运行太慢

performSegueWithIdentifier:sender: 找不到我的转场

unwind segue / performSegueWithIdentifier: 问题

performSegueWithIdentifier 不起作用

performSegueWithIdentifier:从 didSelectRowAtIIndexPath 调用的方法缓慢显示视图