弹出视图后出现错误的 UIToolbar

Posted

技术标签:

【中文标题】弹出视图后出现错误的 UIToolbar【英文标题】:Wrong UIToolbar Appears After Popping View 【发布时间】:2011-04-12 15:18:14 【问题描述】:

我是 Objective-C/Cocoa Touch 的新手,希望有人可以帮助解决以下问题。

我在屏幕底部有一个带有地图视图控件和 UIToolBar 的视图。当用户单击地图上的图钉时,他们可以深入查看包含位置详细信息的分组 UITableView。

这是通过推送一个新的导航控制器来完成的:

MapAnnotation *tappedLocation = (MapAnnotation *)[view annotation];

LocationDetailsViewController *placeDetails = [[LocationDetailsViewController alloc] initWithNibName:@"LocationDetailsViewController" bundle:nil];
[self.navigationController pushViewController:placeDetails animated:YES];
[placeDetails release];

在分组的 UITableView 中,屏幕底部还有一个 UIToolbar,但它是通过编程方式设置的(代码如下)。

问题是当用户离开分组的 UITableView 并带着地图返回主视图时,他们仍然看到 UITableView 中的 UIToolbar,而不是在 IB 中设置的原始 UIToolbar。

有人知道我如何从分组的 UITableView 中“取消” UIToolbar 吗?

UIToolbar *toolbar = [UIToolbar new];
toolbar.barStyle = UIBarStyleDefault;
[toolbar sizeToFit];
toolbar.frame = CGRectMake(0, 436, 320, 44);
toolbar.tag = 123;

UIBarButtonItem *flexItem = [[UIBarButtonItem alloc]   
    initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
    target:nil
    action:nil];

UIBarButtonItem *emailButton = [[UIBarButtonItem alloc]
    initWithBarButtonSystemItem:UIBarButtonSystemItemAction
    target:self
    action:@selector(email:)];

//Add buttons to the array
NSArray *items = [NSArray arrayWithObjects: flexItem, flexItem, flexItem, emailButton, nil];
[emailButton release];
[flexItem release];

//add array of buttons to toolbar
[toolbar setItems:items animated:YES];

[self.navigationController.view addSubview:toolbar];

【问题讨论】:

【参考方案1】:

不要将工具栏添加为 navigationController 的子视图。只要应用程序正在运行,该视图就会一直显示在屏幕上(如果您继续进入详细信息视图并返回,则会堆积很多视图)。

使用[UIViewController setToolbarItems:animated:]简单地设置工具栏的项目

【讨论】:

完美。我将您的建议与 [self.navigationController setToolbarHidden: NO animated: YES];隐藏/显示工具栏,它工作得很好

以上是关于弹出视图后出现错误的 UIToolbar的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何检测视图控制器是不是在弹出或关闭后出现

ReduxForm 装饰器,弹出 create-react-app 后出现 no-class-assign 错误

Power BI Desktop安装后,软件打不开。弹出“出现错误 无法加载一个或多个请求的类型。有关更...

弹出mvc控制器的AJAX后请求中出现未知错误

Android:长按文本视图后,我需要弹出上下文菜单

运行代码并输入值 1 后,我的代码行出现 C# 错误,它一直弹出关键字“表”附近的语法不正确