iOS之ViewController的多層presentViewController的dismiss問題


今天在Q群里有人問了個這么個問題: A,B,C,D 都是Viewcontroller。A、B、C、D使用present去切的

他是這么搞的: A -> B, B ->C, C->D,然后他想在D直接到A控制器中。問有沒有什么辦法?

1、 首先先不管這個問題,我們來一起說說push 和present的一些區別?

present: 有一種效果,模態切換。它是VC的一個方法。

上圖中的下面兩個方法是7以上被廢棄了。

push:依賴於導航欄。它是導航欄的一個特有方法.

當然沒還有個區別:present可以立即顯示一個View,后者是把一個View壓進棧,然后顯示出來。

對於如何從d->a  dismiss的問題  想了到了個辦法:

在dismiss的時候如果你是一層一層dimiss的話會出現一個一個界面消失的間隔,這個時候我找了很多資料,但是沒有找到解決辦法都是那么一層一層去搞,用戶體驗不好。像我這種有UI潔癖的是果斷不能接受的。

於是我想為什么present可以一層一層present,還可以一層一層dimiss,感覺有點像push的stack,但更形象的說VC之前存在一種關系,就像一條線。這不禁讓我想起了數據結構中的鏈表。當時周圍的一個伙伴給我出了個主意-----后一個vc指向前一個vc,然后每層dimiss。  然后在之前資料中找到“蘋果的思維非同凡響,其實你只需要解散一個Modal View Controller就可以了。即處於最底層的View Controller,這樣處於這個層之上的ModalView Controller統統會被解散。” 經典,果然 

 最后在d中一句代碼搞定:

[self.presentingViewController.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

然后,然后的然后就是prefrect。

 

總結:

在這個過程中,我還用過通知去解決,然后我在b和c都進行處理對d發出的通知。然而事情並不會d->c->b->a dimiss.哈哈,我太天真了。

消息發出之后,接受者接收執行操作,他們接收的先后順序是不知道的,我太自以為是了,哈哈。別😊我.

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM