按下新视图时删除工具栏

时间:2010-05-18 11:44:07

标签: iphone objective-c cocoa-touch uinavigationcontroller toolbar

在iPhone地图应用程序中,地图视图底部有一个工具栏(它包含搜索/路线段控件等)。通过单击标注从地图视图移动时,工具栏将使用地图视图滑出,留下没有工具栏的下一个视图(表格控制器)。

我试图在第二个视图控制器中对[self.navigationController setToolbarHidden:YES animated:YES]做同样的事情,但是这会给一个奇怪的工具栏向下滑动动画,而地图视图向左滑动。

[self.navigationController setToolbarHidden:YES]中使用viewDidLoad也会产生不良影响(它会在推动动画开始时使工具栏消失,留下一个丑陋的空白区域。)

我假设答案是使用nib文件,但我更喜欢以编程方式(如果可能的话)。

当我推动新的视图控制器时,如何让工具栏“粘贴”到地图视图并随之滑出?感谢。

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

3 个答案:

答案 0 :(得分:3)

事实证明,答案是直接创建工具栏并自己将其添加到视图中。这是UIViewController的代码UINavigationController。帧坐标可以根据屏幕上的内容进行更改。

- (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 :(得分:1)

我在这一天有一天。真的没有得到编程的答案,但视图行为正确的最佳方法是在界面构建器中执行界面。如果在代码中为工具栏设置项目,例如:  [self.navigationController setToolbarItems:control1,control2,...,nil] animated:NO];

凭借我的经验,我可以说你在整个应用程序中说当你推新视图时有一个工具栏,除非你隐藏它(或者你正在使用tabBar),但隐藏它你会得到那些不想要的效果

你可以试试这个:

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

第一个控制器中的

- (void)viewWillDisappear :( BOOL)动画方法, 并在第一个控制器中的 - (void)viewWillAppear:(BOOL)动画方法中将hidden设置为NO。

希望这有帮助。

PS:如果你得到编程答案,请告诉我! = P

答案 2 :(得分:0)

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