2011-04-28 171 views
2

我是iPhone編程的新手。我正在嘗試的是我有一個按鈕的屏幕。我想改變視圖控制器不僅僅是視圖,當我點擊該按鈕(我知道如何添加子視圖),因爲從第二視圖控制器,我必須去第三個視圖,這是不可能的,如果我在第一次添加子視圖地點。有人可以幫我嗎?這可能嗎?如果是,如何?所有視圖和視圖控制器都是通過編程創建的。我沒有使用IB。在按鈕上更改viewController單擊

編輯:這裏是相關的代碼點擊按鈕

-(id)showCurrentLoc:(id)sender { 
locationController = [currentLocController alloc]; 
[entry removeFromSuperview]; 
[newLoc removeFromSuperview]; 
[currentLoc removeFromSuperview]; 
[self.view setBackgroundColor:[UIColor clearColor]]; //[self.view addSubview: [locationController view]]; 
[self.navigationController pushViewController:locationController animated:YES]; [locationController release]; 
return 0; 
} //Location Controller is the tableViewController 

感謝 維克

+0

您可以使用導航控制器。 – saadnib 2011-04-28 06:53:52

回答

3

通常情況下,您會使用導航控制器進行此類操作,以便用戶可以輕鬆地返回到上一個視圖。然後,您的視圖控制器會做這樣的事情:

[self.navigationController pushViewController:someNewViewController animated:YES]; 

如果你想自己管理視圖控制器,你可以永遠只是改變窗口的rootViewController財產。請閱讀View Controller Programming Guide瞭解完整圖片。

+0

@ Caleb-這是我amtrying,但事情是我想lad tableViewController作爲我的第二個viewController,但這不工作。如果我只是添加[self.view addSubView:[xyztableview view]]。然後我可以看到我的表格視圖。我不知道第一種方法有什麼問題嗎? – Vik 2011-04-28 07:00:30

+0

@Vik對不起 - 我無法理解你的評論。既然你是OP,我建議你編輯你的問題來更清楚地解釋實際問題。然而,在你這樣做之前,請仔細看看我引用的文檔。這是iOS開發人員必讀的內容,它絕對解釋瞭如何從一個控制器移到另一個控制器。 – Caleb 2011-04-28 07:08:01

+0

- (id)showCurrentLoc:(id)發送者 { \t \t locationController = [currentLocController alloc]; \t [entry removeFromSuperview]; \t [newLoc removeFromSuperview]; \t [currentLoc removeFromSuperview]; \t [self.view setBackgroundColor:[UIColor clearColor]]; // [self.view addSubview:[locationController view]]; \t [self.navigationController pushViewController:locationController animated:YES]; \t [locationController release]; \t return 0; } //位置控制器是tableViewController – Vik 2011-04-28 07:12:15

2

UINavigationController就是你需要的時候觸發。它管理一堆UIViewController,如果你想添加新的UIViewController,只需將它推入此導航堆棧。它爲你自動執行後退按鈕行爲,並且每當你完成它時,你就可以從棧中彈出當前的UIViewController。

+0

@ Krishnabhadra-這是我amtrying,但事情是我想lad tableViewController作爲我的第二個viewController,但這不工作。如果我只是添加[self.view addSubView:[xyztableview view]]。然後我可以看到我的表格視圖。我不知道第一種方法有什麼問題嗎? – Vik 2011-04-28 07:00:14

+0

應該work..Can您發佈相關的代碼,以便我們可以交叉檢查 – Krishnabhadra 2011-04-28 07:01:58

+0

這裏是有關的代碼,火災時,點擊按鈕 - (ID)showCurrentLoc:(ID)發送 { \t \t locationController = [currentLocController頁頭] ; \t [entry removeFromSuperview]; \t [newLoc removeFromSuperview]; \t [currentLoc removeFromSuperview]; \t [self。查看setBackgroundColor:[UIColor clearColor]]; // [self.view addSubview:[locationController view]]; \t [self.navigationController pushViewController:locationController animated:YES]; \t [locationController release]; \t return 0; } //位置控制器是tableViewController – Vik 2011-04-28 07:13:10

4

你可以做這樣的事情

 YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil]; 
     [self.navigationController pushViewController:objYourViewController animated:YES]; 
     [YourViewController release]; 
+0

這就是我amtrying,但事情是我想lad tableViewController作爲我的第二個viewController,但這不工作。如果我只是添加[self.view addSubView:[xyztableview view]]。然後我可以看到我的表格視圖。我不知道第一種方法有什麼問題嗎? – Vik 2011-04-28 06:59:49

+0

@Vik你如何定義tableViewController即聲明?你可以請張貼代碼爲你的tableViewController創建對象嗎? – 2011-04-28 12:21:21

+0

@ Jennie-謝謝我能夠在代理中聲明它後,使用導航控制器更改視圖控制器。 – Vik 2011-04-28 12:50:05

0

你可以用一個UINavigationController工作。將您的第一個UIViewController中像這樣的init方法:

 [self setViewControllers:[NSArray arrayWithObject:viewController]]; 

然後當按鈕被點擊或作出選擇,你推與第二少數控制器(在第一個的viewController):

[self.navigationController pushViewController:controller animated:YES]; 

這樣你也會得到一個自動(後退按鈕)。基本上,你創建了一堆UIViewControllers,你可以像普通棧一樣推送和彈出。

我希望這會有所幫助。看看以下內容: UINavigationController Class Reference

0
- (void) loadViewAtIndex:(NSInteger)index { 

    [self unloadViewAtIndex:activeViewIndex]; 

    switch (index) { 

     case 1: 
     { 
      if (viewController1 == nil) 
      { 
       viewController1 = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil]; 
      } 

      viewController1.view.frame = CGRectMake(0.0, 0.0, viewController1.view.frame.size.width, viewController1.view.frame.size.height); 

      [window addSubview:viewController1.view]; 
     } 
      break; 

     case 2: 
     { 
      if (viewController2 == nil) 
      { 
       viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil]; 
      } 

      viewController2.view.frame = CGRectMake(0.0, 0.0, viewController2.view.frame.size.width, viewController2.view.frame.size.height); 

      [window addSubview:viewController2.view]; 
     } 
      break; 

     default: 
      break; 
    } 

    activeViewIndex = index; 
} 

- (void) unloadViewAtIndex:(NSInteger)index { 
    switch (index) { 

     case 1: 
     { 
      if (viewController1 != nil) 
      { 
       [viewController1.view removeFromSuperview]; 
       [viewController1 release]; 
       viewController1 = nil; 
      } 
     } 
      break; 

     case 2: 
     { 
      if (viewController2 != nil) 
      { 
       [viewController2.view removeFromSuperview]; 
       [viewController2 release]; 
       viewController2 = nil; 
      } 
     } 
      break; 

     default: 
      break; 
    } 
}