有無論如何確定當前是否顯示模態視圖控制器?目前的觀點?確定是否顯示模態視圖控制器
我有一個問題,其中一個viewDidAppear被調用兩次,只需要調用一次,以解決我想看看如果一個模式視圖控制器是否在屏幕上,如果它運行一個代碼,否則什麼都沒有。
如果我可以在導航堆棧中的當前視圖控制器內進行編碼並查看模態視圖控制器是否在當前時間之上,那將會非常有用嗎?
有無論如何確定當前是否顯示模態視圖控制器?目前的觀點?確定是否顯示模態視圖控制器
我有一個問題,其中一個viewDidAppear被調用兩次,只需要調用一次,以解決我想看看如果一個模式視圖控制器是否在屏幕上,如果它運行一個代碼,否則什麼都沒有。
如果我可以在導航堆棧中的當前視圖控制器內進行編碼並查看模態視圖控制器是否在當前時間之上,那將會非常有用嗎?
檢查模式viewController的健康狀況的正確位置是在呈現viewController。呈現視圖控制器應該知道其呈現的viewController是否仍然存在,或已被解僱(它負責這兩個任務)。 presentsViewController有一個屬性,presentedViewController
它攜帶您需要的引用。
如果已經掩蓋了模態VC,例如通過自己推送另一個viewController,您將能夠確定navController.viewControllers數組屬性:最好的參考源再次返回到呈現viewController。
如果您無法從其呈現的viewController中獲得對模式viewController的引用,那麼您的設計可能有問題,您需要重新思考。
如果「viewDidAppear
」被調用兩次,可能是您實例化(創建)您的視圖兩次。
在「viewDidAppear
」中設置斷點並查看回溯,以查看您的新視圖控制器是以編程方式(在代碼中)創建還是由您在XIB或Storyboard中實例化創建。
您只需要創建一次,如果只創建一次,則只會調用一次「viewDidAppear
」。
p.s.你是在談論*模態*的意見或只是定期的意見?在Valentin做他的編輯之前,你在談論「模型視圖控制器」(這是一種設計模式),我懷疑你只是在討論一個常規視圖。但是@sooper提到了「莫代爾」,我認爲這是瓦倫丁做他的編輯的啓發。 –
我想他是第一次提起一個VC,獲得'viewDidAppear',將第二個控制器作爲模式呈現,解散該模式,並在第一個控制器重新出現視圖時再次獲得'viewDidAppear'。這是標準操作程序。 – Rob
@MichaelDautermann謝謝,我會在開始時加載一個VC,它會檢查一個用戶是否登錄,如果沒有提供登錄的VC模型。我所看到的是原始(第一)VC被調用兩次的viewDidAppear。你是對的,理想情況下我不希望這被稱爲兩次,我不確定這是否正常。如果這是我可以用斷點回溯的東西,我該如何從代碼中停止回調的地方確定? – StuartM
如果你想在viewDidAppear
執行一次,有很多方法可以做到,但這裏有一個。首先,定義類屬性:
@property (nonatomic) BOOL alreadyRun;
然後在viewDidAppear
,檢查屬性:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (!self.alreadyRun)
{
self.alreadyRun = YES;
// do whatever you need to have done once per instance of this VC
}
}
我想你可以使用PresendedViewController屬性。早期版本是modalViewController。
難道你不能只跟蹤顯示/隱藏你的模式視圖控制器與布爾屬性? – sooper