2012-04-27 69 views
1

我有一個iPhone應用程序,它的主接口使用UITabBarController。該應用程序還大量使用來自各個選項卡的模態UINavigationController。我應該在哪裏創建和呈現在整個iPhone應用程序中使用的Modal ViewController

有一個ViewController,我需要以模態方式呈現哪些可以從應用程序中的各種位置觸發。複製在觸發它的所有viewController之間創建並呈現的代碼似乎是一個糟糕的主意。我想把這段代碼放在一個地方,並從viewController想要呈現的地方觸發它。

這個中心位置應該在哪裏?我的根ViewController是一個UITabBarController,所以在那裏沒有用,我討厭將視圖功能集成到AppDelegate中。

回答

1

我會創建一個具有呈現你想要的視圖功能的新的類文件。這樣,你只需要編寫一次代碼來呈現模態視圖,每個需要使用它的視圖都可以用一行代碼調用helper類的函數。

@interface ApplicationHelper : NSObject { 
} 

+(void)showMyModalView:(UIViewController *)parentViewController; 

@end 

實現:

#import "ApplicationHelper.h" 
#import "ViewController.h" 

@implementation ApplicationHelper 

+(void)showMyModalView:(UIViewController *)parentViewController 
{ 
     ViewController *vc = [[ViewController alloc] init]; 

     [parentViewController presentModalViewController:vc animated:YES]; 
} 
@end 

然後在每個視圖控制器進口ApplicationHelper並調用showMyModalView方法

[ApplicationHelper showMyModalView:me]; 

這可以讓你把所有的視圖處理代碼在一個單獨的文件到您的應用程序委託。

+0

謝謝。是的,這比在任何地方重複相同的代碼都好。 – Undistraction 2012-04-27 12:28:39

0

您可以創建一個UIViewController併爲其實施一些委託方法。然後你就可以呈現視圖控制器是這樣的:

[currentViewController presentViewController:yourViewController animated:YES]; 

當一個事件在您的視圖控制器被觸發,這將委託給調用者。

在這種情況下,您只需將代碼寫入「YourViewController」一次,然後在任何需要的地方重複使用它。您也可以使用pushviewcontroller:

[self.navigationController pushviewcontroller:yourViewController animated:YES]; 
+0

我明白如何呈現模態ViewController。我通過我的應用程序將引用傳遞給單個ViewController是沒有意義的。我也不喜歡使用AppDelegate作爲全局變量的註冊表。使用NSNotifications從單個位置觸發模態ViewController的演示對我來說更有意義。我無法確定這個單一位置應該在哪裏。 – Undistraction 2012-04-27 09:59:17

0

不要試圖繞過參考。

只需alloc] init];一個新的實例,你需要使用它。

例如。

MyModalViewController *controller = [[MyModalViewController alloc] init]; 
[self presentModalViewController:controller animated:YES]; 
+0

這看起來很浪費,最終導致應用程序中不必要的重複代碼。 – Undistraction 2012-04-27 12:27:50

+0

創建一個對象然後顯示它,有什麼比這更簡單? – trapper 2012-04-27 12:37:16

相關問題