无法使用自定义视图触发栏按钮项?

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,因为导航栏负责为自己的按钮项着色。

【讨论】:

以上是关于无法使用自定义视图触发栏按钮项?的主要内容,如果未能解决你的问题,请参考以下文章

导航栏按钮单击事件在单击其下方区域时触发。

具有自定义视图的 NSMenuItem 不接收鼠标事件

滚动时更新自定义列表视图失败

自定义 Segue NavBar 后退按钮

无法单击 UWP 自定义标题栏按钮

单击 UITabBarController 时的自定义操作