2014-03-29 33 views
0

我想要一個按鈕加載不同的視圖控制器 爲開始按鈕的動作加載不同的視圖控制器是這樣的:不能從單一的UIButton

-(IBAction)startApp:(id)sender{ 
    switch (menuItem) { 
     case 1: 
     [self openPage1]; 

     break; 
     case 2: 
     [self openPage2]; 

     break; 
     case 3: 
     [self openPage3]; 

     break; 
     case 4: 
     [self openPage4]; 

     break; 
     default: 
     break; 
    } 

} 

值菜單項設置其他地方並沒有問題。 開關盒中的功能也可以在不同的menuItem值上正確調用。

-(void)openPage1{ 
    Page1 * myPage1 = [[Page1 alloc] init]; 
    [self.navigationController pushViewController:myPage1 animated:YES]; 

} 

-(void)openPage2{ 
    Page2 *myPage2 = [[Page2 alloc] init]; 
    [self.navigationController pushViewController:myPage2 animated:YES]; 

} 

-(void)openPage3{ 
    Page3 *myPage3 = [[TableViewController alloc]init]; 
    [self.navigationController pushViewController:myPage3 animated:YES]; 
} 

-(void)openPage4{ 
    Page4 *myPage4 = [[Page4 alloc]init]; 
    [self.navigationController pushViewController:myPage4 animated:YES]; 
} 

我導入了視圖控制器的所有.h文件,所以這不是問題。

問題是所有openPage#()方法正在執行,但是頁面(即視圖控制器)在按下開始按鈕時未加載。

+0

當你按下啓動按鈕是什麼情況?什麼也沒有,或者去一個空白的視圖控制器? – rdelmar

+0

@ rdelmar什麼也沒有發生。該方法被調用,但方法內的語句未執行 –

回答

1

視圖控制器實際上是否有導航控制器?在其中一個openPage#方法中放置一個調試點,並檢查self.navigationController是否爲零。

您可以通過在控制檯中鍵入po self.navigationController,同時在該方法中停止調試器來完成此操作。

如果您沒有在導航控制器中嵌入視圖控制器,則無法使用navigationController屬性。如果是零,做1 2的東西:


使用[self presentViewController:myPage# animated:YES];這將模態動畫視圖控制器了。


將您當前的視圖控制器放到導航控制器中。我不知道你當前的視圖控制器是如何呈現的,但基本上不是僅呈現視圖控制器,而是首先將其包裝在UINavigationController中。假設此視圖控制器根視圖控制器是安裝在應用程序委託:

MyViewController *myController = [MyViewController new]; 
UINavigationController *navController = [[UINavigationController alloc] 
    initWithRootViewController:navController]; 
self.window.rootViewController = navController; 
+0

您的意思是說自我視圖控制器應嵌入導航控制器中? –

+0

是的,它是零。如何實例化它?我爲自己的視圖控制器選擇了錯誤的屬性? –

+0

我更新了我的答案,其中包括解決問題的兩種方法。基本上你不能使用navigationController屬性,除非它被嵌入到導航控制器中。所以你可以將它嵌入到一箇中,或者你可以通過模態而不是通過導航控制器來呈現它。 – drewag