无法使用自定义视图触发栏按钮项?
Posted
技术标签:
【中文标题】无法使用自定义视图触发栏按钮项?【英文标题】:Could not trigger bar button item with custom view? 【发布时间】:2012-01-24 13:03:07 【问题描述】:在我的 iphone 应用程序中,
我有一个要设置的导航栏图像我已经这样设置了......
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationBarReady.png"] forBarMetrics:UIBarMetricsDefault];
UIBarButtonItem *bbiLeft=[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btnBack.png"] style:UIBarButtonItemStylePlain target:self action:@selector(btnBackPressed:)];
[bbiLeft setTintColor:[UIColor clearColor]];
[bbiLeft setBackgroundVerticalPositionAdjustment:7.0f forBarMetrics:UIBarMetricsDefault];
self.navigationItem.leftBarButtonItem=bbiLeft;
看起来像这样……
我想把它的颜色设置为导航栏的背景
怎么样? 谢谢..
【问题讨论】:
非常努力地避免使用自定义视图来定位 UIBarButtonItem,但阅读文档后我发现为什么setBackgroundVerticalPositionAdjustment:forBarMetrics:
不适用于 UIButtonTypeCustom。来自 Apple 文档:This offset is used to adjust the vertical centering of bordered bar buttons within the bar.
- 注意 BORDERED
【参考方案1】:
得到答案...
/* Back Button setted*/
UIButton *btnBack=[UIButton buttonWithType:UIButtonTypeCustom];
[btnBack addTarget:self action:@selector(btnBackPressed:) forControlEvents:UIControlEventTouchUpInside];
[btnBack setImage:[UIImage imageNamed:@"btnBack.png"] forState:UIControlStateNormal];
[btnBack setFrame:CGRectMake(0, 0, 51,16)];
UIView *backModifiedView=[[UIView alloc] initWithFrame:btnBack.frame];
[btnBack setFrame:CGRectMake(btnBack.frame.origin.x, btnBack.frame.origin.y+7, btnBack.frame.size.width, btnBack.frame.size.height)];
[backModifiedView addSubview:btnBack];
UIBarButtonItem *bbiLeft=[[UIBarButtonItem alloc] initWithCustomView:backModifiedView];
self.navigationItem.leftBarButtonItem=bbiLeft;
/* Arpit */
//set Navgation Bar.
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationBarReady.png"] forBarMetrics:UIBarMetricsDefault];
【讨论】:
【参考方案2】:将 tintColor 设置为 clear 不起作用,您应该选择与条形背景匹配的颜色。
此外,您可能需要设置 UINavigationBar 的 tintColor,而不是 UIBarButtonItem 本身的 tintColor,因为导航栏负责为自己的按钮项着色。
【讨论】:
以上是关于无法使用自定义视图触发栏按钮项?的主要内容,如果未能解决你的问题,请参考以下文章