我在这个问题上进行了大量的谷歌搜索,也许我无法找到合适的关键字,所以没有运气确定解决方案。 也许这里有人可以提供帮助。
我有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)
}
}
如果有人能够对此事有所了解,我得到的行为对我来说是一个完全的谜......
答案 0 :(得分:2)
unwind方法在unwind segue完成之前触发,因此你在unwind to master发生之前触发了编辑segue。
因此,当展开完成时,您会看到编辑屏幕,然后是主屏幕。
您需要主人在viewWillAppear
等方法中触发segue。您可以在unwind方法中在主VC上设置一个标志,以指示它应该执行此操作