推出新视图时如何删除工具栏

3
在iPhone地图应用中,地图视图底部有一个工具栏(包含搜索/方向选项卡和其他选项)。当通过单击标注移动到另一个视图时,工具栏会随着地图视图一起滑出,使得下一个视图(表格控制器)没有工具栏。
我已经尝试在第二个视图控制器中使用[self.navigationController setToolbarHidden:YES animated:YES]来实现相同的效果,但是这会产生奇怪的工具栏向下滑动的动画,而地图视图正在向左滑动。
viewDidLoad中使用[self.navigationController setToolbarHidden:YES]也会产生不良影响(它会使工具栏在推送动画开始时消失,留下丑陋的白色空间)。
我假设解决方法是使用nib文件,但如果可能的话,我更喜欢以编程方式实现。
如何让工具栏“粘”在地图视图上,并在推送新视图控制器时与其一起滑出?谢谢。

高级餐厅斯陶特 http://img.skitch.com/20100518-xfubyriig48d3ckaemjg2ay8q.jpg

3个回答

3

事实证明,答案是直接创建工具栏并将其添加到视图中。这是针对带有UINavigationControllerUIViewController的代码。框架坐标可以根据屏幕上的内容而更改。

- (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];
}

1

我曾经围绕这个问题一整天。真的不明白编程上的答案,但是让视图正确行为的最好方法是在界面构建器中进行接口设计。如果您像这样在代码中设置工具栏项目:

[self.navigationController setToolbarItems: control1, control2,..., nil] animated: NO];

以我的少量经验来看,我可以说您是在告诉整个应用程序在推送新视图时要有一个工具栏存在,除非您隐藏它(或者您正在使用选项卡),但是隐藏它会产生不必要的影响。

您可以尝试这个:

[self.navigationController setToolbarHidden:YES animated:YES];

在您的第一个控制器 - (void)viewWillDisappear:(BOOL)animated 方法中设置隐藏,并在第一个控制器的 - (void)viewWillAppear:(BOOL)animated 方法中将其设置为NO。

希望这能帮到您。

PS:如果您得到了编程上的答案,请告诉我!=P


嗨,Omer。我不完全理解视图控制器,所以我喜欢通过编写代码来学习。你说整个应用程序都有工具栏是正确的,因为它附加在导航控制器上。你的回答给了我需要的线索。我自己创建了工具栏并将其添加为子视图。感谢您的帮助。我已经将代码发布为答案。 - nevan king

0

重写第二个视图控制器的-viewWillAppear:方法以隐藏工具栏。


谢谢你的回答。我之前犯了一个错误,我使用的是 -viewDidLoad 而不是 -viewDidLoad:animated(后者不存在)。在 -viewWillAppear:animated 中隐藏工具栏会产生相同的效果,它可以立即隐藏工具栏,或者在推出视图控制器时进行滑动动画。 - nevan king

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接