2014-10-29 54 views
0

我的應用程序是基於選項卡的。在一個選項卡上是一個地圖(我正在使用Mapbox)。當我點擊此選項卡時,它會在navigationcontroller頂部欄的右上角放置一個trackingbarbutton項目。點擊後,此按鈕與mapView交互顯示用戶的位置。我遇到的問題是,當我轉到另一個選項卡(除地圖之外)時,我需要從右上角刪除跟蹤欄按鈕,因爲它不適用於任何其他選項卡。重新顯示依賴mapbox mapView的rightBarButtonItem?

這裏的MapView和跟蹤欄按鈕如何初始化

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    RMMBTilesSource *offlineSource = [[RMMBTilesSource alloc] initWithTileSetResource:@"example-map" ofType:@"mbtiles"]; 
    RMMapView *mapView = [[RMMapView alloc] initWithFrame:self.view.bounds andTilesource:offlineSource]; 

    //Initalize button in top-right 
    self.tabBarController.navigationItem.rightBarButtonItem = [[RMUserTrackingBarButtonItem alloc] initWithMapView:mapView]; 
} 

這裏是我隱藏按鈕現在

- (void)viewWillDisappear:(BOOL)animated 
    self.tabBarController.navigationItem.rightBarButtonItem = nil; 
} 

通常情況下,我只想在viewWillAppear中重新初始化按鈕(),但問題是我需要使用在viewDidLoad()中初始化的mapView對象。有沒有人有任何想法,我可以重新使用該對象或簡單地隱藏rightBarButtonItem而不是完全刪除它?我寧願不要每次都重新初始化mapView。

謝謝!

+0

只是一個評論,但這也會在MapKit中以相同的方式操作,因爲那裏的欄按鈕項目的作用是相同的。 – incanus 2014-10-30 17:21:06

回答

0

您是否嘗試過修改UIViewControllernavigationItem而不是UITabBarController。這樣,rightBarButtonItem應該只在顯示該視圖控制器時顯示,並在新的UIViewController顯示其自己的navigationItem時自動隱藏。雖然我不是100%確定這一點。

- (void)viewDidLoad 
{ 
    ... 
    //Initalize button in top-right 
    self.navigationItem.rightBarButtonItem = [[RMUserTrackingBarButtonItem alloc] initWithMapView:mapView]; 
}