2011-05-12 91 views
3

我沒有爲我的應用中的視圖導航提前做好計劃,因此用戶可以通過一個循環來疊加模態視圖,然後從那裏開始只能通過手動關閉每個重複視圖的耗時過程來訪問根視圖控制器。在沒有導航控制器的情況下關閉多個模態視圖

我不能繼續前進,並且在沒有導航控制器的情況下使用popToRootViewControllerAnimated:(當時稱爲presetModalViewController:animated:似乎是個好主意),所以除非Google隱瞞我的某些事情,否則我是完全失去了。

重寫導航代碼的一半並不理想,但如果這真的是唯一的選擇,我會給它一個鏡頭。
避免這一點肯定會更好。

不知道什麼代碼會有幫助,如果有的話。這只是提出/解僱模態視圖控制器與幾個小類UIViewController

回答

0

好吧,現在我明白了。線下是我永遠不應該做的。而不是試圖包含循環堆棧,我應該剛剛阻止它。

也就是說,「加載」按鈕不再生成另一個視圖。相反,它忽略了當前的視圖,它只能是Load視圖的子視圖,給人一種新視圖的幻覺,並完全消除了不可控增長堆棧的問題。


再次,這是錯誤的選項:

一個全球性的,少數#define倒是字符串,以及一些的if/else堆棧,以及缺乏一個導航控制器是沒有問題的。

如果有人對我所做的事情感興趣(和/或稍後修改多少樂趣),我會將其中的一些內容放入此答案中。這並不美妙,編寫起來很痛苦(主要是因爲新代碼跨越了四個文件並且安靜地打破),但它確實是我想要的。

+0

這並不重要,但我投入了一些內容以允許用戶決定是否應該對動畫進行轉換。如果BOOL設置爲NO,則不會顯示current和root之間的視圖。如果使用動畫:YES,那麼看起來會更好,唯一的過渡是從頂部到根部,而不是在二分之一秒之間顯示兩者之間的每個視圖。我會看看我能做什麼。 – Thromordyn 2011-05-13 16:19:39

+0

劃痕。現在不可能在堆棧中有超過4個視圖(包括root),所以關閉特定轉換的動畫並不是太麻煩。 – Thromordyn 2011-05-16 15:45:34

0

更改視圖屬性在你的UIViewController不起作用?

+0

我不認爲我明白你的意思。 – Thromordyn 2011-05-12 15:59:46

2

答:答:簡單的答案;

只需撥打dismissModalViewController:animated:就可以看到您想要查看的內容。

答案B:真正的答案;

要重新導入導航控制器應用程序並不困難,我會啓動一個新的導航應用程序項目,並查看應用程序委託中的方法並模擬該行爲。

那麼當你通常會存在,只是推([self.navigationController pushViewController: controller animated: YES])和你的解僱將成爲流行([self.navigationController popViewControllerAnimated: YES]

希望幫助

+0

正如我所說,有一個循環,但我不想刪除有問題的按鈕(從它的視圖中),因爲它會混淆用戶界面,併爲用戶造成不便。我試圖採取簡單的方式,而不是實施一個適當的導航控制器......(主要是因爲IB對改變這樣的事情很煩惱。)無論如何,我會看看我能做些什麼,至少直到(或者說,除非)有人提出我最初希望的解決方案。 – Thromordyn 2011-05-12 16:06:23

+0

IB不關心導航欄,如果它被設置,它只是出於佈局的原因,你可以使用導航控制器而不顯示導航欄。您可以使用底部的工具欄或視圖中間的按鈕,導航控制器不會在意。 – 2011-05-12 17:33:35

+0

導航控制器在經過一番思考後肯定聽起來是最好的選擇,但我不確定如何去實現它。我明天會看看我能找到什麼。 – Thromordyn 2011-05-12 21:34:32

1

兩個@格雷迪的答案是正確的。一看爲-dismissModalViewController:animated:的文檔講述了:

如果本幾個模態視圖 控制器在連續,並因此 構建一個堆模態視圖 控制器,調用 視圖控制器這種方法在較低的堆棧 取消了其在子堆棧上方的其直接子視圖 控制器和所有視圖控制器 。當 發生這種情況時,只有最上面的視圖 以動畫形式被解僱; 任何中間視圖控制器 只是從堆棧中刪除。

您應該使用-dismiss ...而不是從導航堆棧中彈出控制器,因爲模式控制器甚至可能不是導航堆棧的一部分。不過,如果你發現你的應用應該是一個基於導航的應用,那麼花點時間來完成它。如果這是很多工作,那麼可能無論如何都需要完成工作。

相關問題