2010-11-04 138 views
1

我有一個導航控制器和位於稱爲切換的導航欄右側的按鈕。當我按下按鈕時,我基本上都想在表格視圖和地圖視圖之間切換。我怎樣才能做到這一點?使用UINavigationController切換視圖

這可以通過推動和彈出導航堆棧來回嗎?

回答

1

好的...你可以使用navigationControllers等來完成。

你只需要做出一個方法都viewControllers,並在每個viewDidLoad中把這個:

[self.navigationItem setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithTitle:@"Toggle" style:UIBarButtonItemStylePlain target:self action:@selector(toggleView:)] autorelease]]; 

那麼你要在你的第一個視圖這種方法(可以說其列表視圖):

-(void)toggleView:(id)selector { 
    MapViewController *mapViewController = [[MapViewController alloc] initWithNibName:nil bundle:nil]; 
    [self.navigationController pushViewController:mapViewController animated:NO]; // this pushes a view onto the stack 
    /* or you could use this: 
    [self presentModalViewController:mapViewController animated:YES]; 
    // which slides the view up over the current view */ 
    [mapViewController release]; 
} 

那麼的MapView:

- (void)toggleView:(id)selector { 
     [self.navigationController popViewControllerAnimated:YES]; // this pops back a view 
     /* or you went for the second option above: 
     [self dismissModalViewControllerAnimated:YES]; 
     // which slides the view back down. */ 
} 
+0

所以在每個viewDid加載我需要做self.navigationItem setRightBarButtonItem ......? – aherlambang 2010-11-04 21:51:05

+0

這個畫的一面是我有一個後退按鈕,這很尷尬 – aherlambang 2010-11-04 21:52:05

+0

是的。 :p(和15個字符) – 2010-11-04 21:52:41

1

我在我的一個應用中做了同樣的事情,除了分段控制。就我而言,地圖和表格邏輯上處於同一層級,因此使用導航控制器沒有任何意義。

基本上,當用戶在應用程序中的那一點時,我實例化了表視圖和地圖視圖。當我收到一個按鈕按下事件時,我只是將一個視圖移到另一個視圖的前面(bringSubviewToFront)。來自這兩個視圖的事件(地圖和表格)將下一個視圖推送到控制器上。爲確保導航控制器上的後退按鈕有意義,我只需在RootViewController中切換navigationItem標題。所以,如果他們想切換地圖:

[self.view bringSubviewToFront:self.map_view.view]; 
    UIBarButtonItem *backButton = 
    [[UIBarButtonItem alloc] initWithTitle:@"Map" style: 
    UIBarButtonItemStylePlain target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = backButton; 

等等

因爲我遇到了一些內存的問題,我也有一些代碼,將垃圾地圖,如果重置後退按鈕標題我收到內存警告,切換按鈕委託方法將檢查在洗牌視圖之前是否需要重新實例化映射。每次切換時,我都會比實例化並釋放地圖更好。通常保留地圖的流體性能要好得多,它允許用戶的地圖狀態持續(只要我們沒有達到內存限制)。

希望這會有所幫助。

+0

我喜歡你更好的解決方案,但我真的不曲ite得到它...爲什麼你有一個後退按鈕,如果你只是在另一個頂部顯示一個視圖? – aherlambang 2010-11-04 21:53:52

+0

當他們點擊表格行或地圖註釋並傳遞給記錄視圖時,我會顯示一個後退按鈕。當他們從那裏回來時,他們會回到地圖或桌子上,無論他們最後使用哪一個。我應用程序中的後退按鈕指示他們應該看到哪些人。 – jmans 2010-11-05 13:45:03

+0

哦,好吧,這是有道理的,然後...是你的應用程序商店? – aherlambang 2010-11-05 14:36:35