0

我與設置這樣的主視圖的一個UISplitViewController:駁回拆分視圖酥料餅控制器

的UIViewControllers的
UITabBarController 
    Tab1: 
    UINavigationController -> UIViewController -> UIViewController 
    Tab2: 
    UINavigationController -> UIViewController 

每個都是一個表格圖,並且當用戶在過去的一個選擇一排,一個圖像顯示在詳細視圖中,其中包含一個UIScrollView。

標籤欄控制器是UISplitViewControllerDelegate,並處理在滾動視圖頂部的工具欄上放置按鈕。

問題是,我想要添加代碼以在用戶進行選擇時關閉彈出窗口。彈出按鈕的指針必須在按鈕上升時保存在標籤欄控制器中,然後用於在用戶進行最終選擇時關閉行中的多個視圖控制器的彈出窗口。對於需要該指針的視圖控制器來說,似乎沒有任何方法可以實現,而不需要做任何事情,比如將其存儲在App Delegate中。

我沒有看到其他人問這個問題,這導致我相信我再次忽略了一些簡單的東西。請賜教!

回答

0

聽起來你的標籤欄控制器已經是UITabBarController的子類,這意味着你已經有了一些自定義的代碼。我建議標籤欄控制器是popover的主要所有者,並且它是表格視圖控制器的責任,只是通知標籤欄控制器已做出選擇。標籤欄控制器可以通過關閉彈出窗口來響應該消息。您可以利用UIViewController已經有一個訪問包含給定控制器的標籤欄控制器的方法。

因此,這將是這個樣子:

@interface MyTabBarController : UITabBarController 
- (void)itemWasSelected; 
@end 

@implementation MyTabBarController { 
    UIPopoverController *popover; 
} 

- (void)itemWasSelected { 
    [popover dismissPopoverControllerAnimated:YES]; 
} 
@end 

////////////// 

@implementation TableController 

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)path { 
    // Do whatever else you want to do 
    MyTabBarController *tabController = (MyTabBarController *)self.tabBarController; 
    [tabController itemWasSelected]; 
} 

通過這一解決方案,表控制器不必瞭解酥料餅的任何事情;它只是要知道它將在MyTabBarController內呈現,這似乎是一個合理的事情,它知道。

0

您可以創建一個單例類來跟蹤您的彈出狀態,然後同樣輕鬆地將其提供給所有類。這樣,它可以很容易地從任何代碼更新和訪問,而不必直接爲應用程序委託負擔過重,即使這基本上是相同的想法,但在它自己的單例中有點乾淨。