iOS Swift Unwind将细节转换为Master,以启动segue到Detail2不按顺序工作

时间:2016-02-10 20:53:19

标签: ios swift segue

我在这个问题上进行了大量的谷歌搜索,也许我无法找到合适的关键字,所以没有运气确定解决方案。 也许这里有人可以提供帮助。

我有3个Viewcontrollers - Master,Detail和TaskEditViewController。

我发布的本地通知会启动Detail VC上的一个方法,该方法应该放松到Master,然后启动一个可以转换为TaskEditViewController的方法。

首先,我将segue从Detail转换为TaskEditViewController动画(它们在故事板上没有segue),之后将展开并转到Master。

这是我在Detail VC上的代码(接收通知的代码):

func editFromNotification(notification: NSNotification) {
    print("Add New Task Screen received")
    if let notifId = notification.object!["notifId"] as? String {

        taskIdToSend = notifId

        selectedTask = getTaskForSelectedId(notifId)

        self.performSegueWithIdentifier("sendNotificationToMaster", sender: nil)   
    }   
}

这是从Master VC上的unwind segue中获取的方法:

@IBAction func unwindAndProcessNotification(segue:UIStoryboardSegue) {
    if(segue.sourceViewController .isKindOfClass(Detail)) {
        let viewSource:Detail = segue.sourceViewController as! Detail
        let receivedTaskId = viewSource.taskIdToSend
        print("Task sent to open is: \(receivedTaskId)")
        selectedTask = getTaskForSelectedId(receivedTaskId)
        performSegueWithIdentifier("showEditScreen", sender: nil)
    }
}

如果有人能够对此事有所了解,我得到的行为对我来说是一个完全的谜......

1 个答案:

答案 0 :(得分:2)

unwind方法在unwind segue完成之前触发,因此你在unwind to master发生之前触发了编辑segue。

因此,当展开完成时,您会看到编辑屏幕,然后是主屏幕。

您需要主人在viewWillAppear等方法中触发segue。您可以在unwind方法中在主VC上设置一个标志,以指示它应该执行此操作