0

我正在使用的應用程序有三個選項卡,都有一個搜索欄,用戶可以在任何選項卡上啓動搜索。當搜索開始時,SerchViewController被壓入每個相應的堆棧。目前,當用戶在標籤之間切換時,有三種不同的搜索正在進行。如何確保只有一個SearchVC處於活動狀態,並且當用戶在其他選項卡上開始搜索時,其他SearchVC會從前一選項卡中彈出堆棧?當一個特定的ViewController類被推入到另一個選項卡的堆棧中時,如何從堆棧中彈出視圖控制器?

我怎樣才能:

1)保持對堆棧中的一個的參考到現有SearchVC例如,

2)接收來自另一導航控制器堆棧通知如果SearchVC提出,

3)並在之前的堆棧中彈出(以及所有跟隨的VC)?

例如:

用戶輕敲第一選項卡,堆棧構建是這樣的:

UITabBarController - >UINavigationController - >ProfileVC - >GalleryVC - >SearchVC - >(理論上,從SearchVC堆可以建立幾乎無限) - >ProfileVC從搜索結果 - >GalleryVC - >LikesVC - >ProfileVC - >等

用戶敲擊第二選項卡,堆棧構建是這樣的:

UITabBarController - >UINavigationController - >LibraryVC - >SearchVC - >再次,堆棧可以從這裏幾乎無限地建立。我需要在第一個標籤中彈出SearchVC,因此在標籤之間切換時只有一個SearchVC。當用戶返回到第一個選項卡時,它應該將用戶帶到用戶開始搜索之前的GalleryVC或VC,並將SearchVC推入堆棧。

回答

1

因此,解決方案,我想出了被添加委託協議的NavigationController類呈現SearchVCNavigationController發送消息到UITabBarController該搜索被提出。

UITabBarController委託方法然後通過其導航控制器的陣列穿過和一個標籤上駁回SearchVC如果它不是當前選擇的一個(self.selectedViewController)由出棧到SearchVC然後彈出它關閉:

[self popToViewController:searchViewController animated:NO]; 
[super popViewControllerAnimated:NO]; 
相關問題