3

在iPhone地圖應用程序中,地圖視圖底部有一個工具欄(它包含搜索/路線段控件等)。通過點擊標註從地圖視圖移動時,工具欄會滑出地圖視圖,而不顯示工具欄的下一個視圖(表格控制器)。推送新視圖時移除工具欄

我試圖在第二個視圖控制器中使用[self.navigationController setToolbarHidden:YES animated:YES]做同樣的事情,但這會給出一個奇怪的工具欄滑動動畫,而地圖視圖則向左滑動。

viewDidLoad中使用[self.navigationController setToolbarHidden:YES]也會導致不良效果(它使得在推動動畫開始時工具欄消失,留下難看的空白區域)。

我假設這個答案是使用一個nib文件,但我寧願以編程方式(如果可能)。

當我推新視圖控制器時,如何讓工具欄「粘」到地圖視圖並滑出?謝謝。

Gourmet Haus Staudt http://img.skitch.com/20100518-xfubyriig48d3ckaemjg2ay8q.jpg

回答

3

原來,答案是直接創建工具欄並將其添加到視圖中。這是代碼爲UIViewControllerUINavigationController。幀座標可以根據屏幕上的內容而改變。

- (void)viewDidLoad 
{ 
    // Add a toolbar to the view 
    CGRect toolbarFrame = CGRectMake(0, 372, 320, 44); 
    UIToolbar *myToolbar = [[UIToolbar alloc] initWithFrame:toolbarFrame]; 

    UIBarButtonItem *compassButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"compass.png"] 
                     style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(zoomToCurrentLocation)]; 

    compassButton.width = 30.0f; // make the button a square shape 
    [myToolbar setItems:[NSArray arrayWithObject:compassButton] animated:NO]; 
    [compassButton release]; 

    [self.view addSubview:myToolbar]; 
    [super viewDidLoad]; 
} 
0

覆蓋所述第二視圖控制器的-viewWillAppear:方法來隱藏工具欄。

+0

感謝您的回答。我上面有一個錯誤,我正在使用'-viewDidLoad',而不是'-viewDidLoad:animated'(它不存在)。在'-viewWillAppear:animated'中隱藏工具欄具有相同的效果,它可以立即隱藏工具欄,也可以在推動視圖控制器時滑出動畫。 – 2010-05-18 12:01:04

1

我在這附近呆了一天。真的不要以編程方式回答,但要正確表達視圖的最佳方式是在界面構建器中執行界面。如果您在代碼中爲工具欄設置項目,如: [self.navigationController setToolbarItems:control1,control2,...,nil] animated:NO];

我有一點經驗,我可以說,你是說整個應用程序有一個工具欄存在,當你推新視圖,除非你隱藏它(或你正在使用tabBar),但隱藏它,你會得到那些不想要的效果。

你可以試試這個:

[self.navigationController setToolbarHidden:YES動畫:是]; (void)viewWillDisappear:(BOOL)動畫方法, 以及在第一個控制器中的 - (void)viewWillAppear:(BOOL)動畫方法中隱藏設置爲NO。

希望這會有所幫助。

PS:如果你得到編程式的答案,讓我知道! = P

+0

嗨Omer.I不完全理解視圖控制器,所以我喜歡在代碼中學習所有東西。你說的關於具有工具欄的整個應用程序是正確的,因爲它連接到導航控制器。你的回答給了我我需要的線索。我自己創建了該工具欄,並將其添加爲子視圖。謝謝您的幫助。我發佈了代碼作爲答案。 – 2010-05-18 21:29:19