2016-02-10 91 views
1

我在這件事上做了大量的谷歌搜索,也許我無法找到正確的關鍵字,因此沒有找到解決方案的運氣。 也許這裏有人可能會提供幫助。iOS Swift將細節從細節展開到主從而將細節展開成Detail2不能按順序工作

我有3個Viewcontrollers - 主,細節和TaskEditViewController。

我發佈了一個本地通知,它激發了Detail VC中的一個方法,該方法應該展開給Master,然後啓動一個將繼承到TaskEditViewController的方法。

會發生什麼事情,首先我得到從細節動畫到TaskEditViewController的動畫(它們在故事板上沒有延續),然後展開並轉到Master。

這裏是我的詳細信息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) 
    } 
} 

及這裏的被從展開SEGUE上主VC發射了方法:

@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

unwind方法在展開segue完成之前觸發,因此您在展開到master之前觸發編輯segue,因此您隨着展開完成,請參閱編輯屏幕和主屏幕。你需要主人通過'viewWillAppear'等方法來觸發segue。您可以在unwind方法中的主VC上設置一個標誌,以表明它應該這樣做 – Paulw11

+0

嘿,謝謝,完全工作,你想發佈它作爲答案,所以我可以選擇它作爲解決? – ddikov

回答

2

unwind方法在展開segue完成之前觸發,因此您正在觸發e在主機發生退讓之前,請繼續前進。

因此,您會看到編輯屏幕,然後在展開完成時看到主屏幕。

您需要主人通過諸如viewWillAppear等方法觸發segue。您可以在unwind方法中在主VC上設置一個標誌來指示它應該這樣做