2010-06-04 22 views
0

我有一個問題讓通用應用程序...在應用程序委託我成立了iPad和iPhone的主導航:呈現模式的看法在SPLITVIEW

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
window = [[UIWindow alloc] initWithFrame:[ [UIScreen mainScreen] bounds]]; 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
// The device is an iPad running iPhone 3.2 or later. 
    [self putSplitView]; 
} else { 
    [self putTabBar]; 
} 
[window makeKeyAndVisible]; 
return YES; 
} 

- (void)putSplitView { 
RootiPadViewController *rootiPadViewController = [[RootiPadViewController alloc] init]; 
UISplitViewController *splitController = [[UISplitViewController alloc] init]; 
splitController.viewControllers = [NSArray 
     arrayWithObjects:rootiPadViewController.seccionesView, 
         rootiPadViewController.noticiasView, 
         nil]; 
    [window addSubview:splitController.view]; 
} 

- (void)putTabBar { 
TabBarController *tabBar = [[TabBarController alloc] init]; 
[window addSubview:tabBar.view]; 
} 

RootiPadViewController負責的加載數據的生成用於SPLITVIEW窗格,使得其初始化摻有經加載器modalView,使得:

@implementation RootiPadViewController 

@synthesize seccionesView, noticiasView; 

- (id)init { 
if ((self = [super init])) { 
    SeccionesVC_iPad *sec = [[SeccionesVC_iPad alloc] init]; 
    NoticiasVC_iPad *not = [[NoticiasVC_iPad alloc] init]; 
    self.noticiasView = not; 
    self.seccionesView = sec; 
    Init *initVC = [[Init alloc] init]; 
    [self presentModalViewController:initVC animated:YES]; 
} 
return self; 
} 

代碼編譯沒有警告,但由於某些原因initVC的的loadView方法不會被調用和模態視圖不會出現...

任何想法,爲什麼會發生這種情況? 感謝您的幫助!

安東尼

回答

1

也許你應該從RootViewController的「viewDidLoad中」的方法呈現,而不是「init」的方法,你的模式視圖控制器,...不知道視圖層次結構中創建不久

2

我知道這是去年的問題,但儘管我認爲我找到了原因,但我仍然試圖找出解決這個問題的良好非黑客解決方案。

假設你正在努力爲iPad:

初始化後,splitViewController師父的viewDidLoad首先被調用,然後是詳細的viewDidLoad。

如果您嘗試在模型窗口初始化器中放置一個模式窗口初始值設定項,似乎沒有任何事情發生:這是因爲細節的viewDidLoad在您的模態視圖的viewDidLoad後執行,導致模態視圖被隱藏起來。

突破模態視圖類,我看到它在模態視圖中輸入initWithNibName。我不使用ARC,在這裏我假設你的模態視圖不會在程序退出之前解除分配 - 模態視圖仍然存在,但是沒有辦法解決它。

在iPhone中: 無視這一點 - 因爲iPhone沒有任何splitViewController。實際上,默認的Universal splitViewController項目將Master和Detail視圖視爲單獨的頁面。因此,在init應用程序中,所有您必須擔心的是主viewDidLoad。

這就是爲什麼在Universal項目中,推送viewDidLoad中的模式視圖在iPhone模擬器中按預期工作,但從不在iPad模擬器中。

請注意,這隻適用於viewDidLoad階段;如果將模型視圖AFTER viewDidLoad推入主窗口,模式視圖將按預期工作。