使用背景图像自定义UIBarbuttonitem

时间:2010-06-22 13:21:10

标签: iphone cocoa-touch uibarbuttonitem uitoolbar uibarbuttonitemstyle

我在它上面添加了一个UIToolbar和按钮的实例。每个按钮属于UIBarButtonItem类。

我的要求是每个按钮都有自定义布局,我不想使用Apple提供的原生按钮样式。所以我在Interface Builder中有3个选项(Plain,Bordered,Done)。 我选择了Plain样式并选择了我要添加为背景的图像 酒吧项目 - >图像。

但它对我没有用,使用普通选项让我更接近边界和完成距离更近但仍然以白色轮廓显示图像。无论如何,按钮上的图像被添加,它们看起来完全一样。使用UIButton时,这是一项非常简单的任务。我刚刚在UIButton的Attributes检查器中使用了Image选项,并选择了我想要的图像。但是在这里使用UIBarButtonitem它根本不起作用。 这就是它的显示方式

由于 泰穆尔

4 个答案:

答案 0 :(得分:24)

泰穆尔,

我遇到了你遇到的同样问题。我们的设计师在我们的应用程序导航栏中为按钮指定了自定义外观。这是我编写的实用方法,用于生成我们需要的UIBarButtonItems,您应该能够根据需要对其进行修改:

+ (UIBarButtonItem *)createSquareBarButtonItemWithTitle:(NSString *)t target:(id)tgt action:(SEL)a
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    // Since the buttons can be any width we use a thin image with a stretchable center point
    UIImage *buttonImage = [[UIImage imageNamed:@"SquareButton.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0];
    UIImage *buttonPressedImage = [[UIImage imageNamed:@"SquareButton_pressed.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0];

    [[button titleLabel] setFont:[UIFont boldSystemFontOfSize:12.0]];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
    [button setTitleShadowColor:[UIColor colorWithWhite:1.0 alpha:0.7] forState:UIControlStateNormal];
    [button setTitleShadowColor:[UIColor clearColor] forState:UIControlStateHighlighted];
    [[button titleLabel] setShadowOffset:CGSizeMake(0.0, 1.0)];

    CGRect buttonFrame = [button frame];
    buttonFrame.size.width = [t sizeWithFont:[UIFont boldSystemFontOfSize:12.0]].width + 24.0;
    buttonFrame.size.height = buttonImage.size.height;
    [button setFrame:buttonFrame];

    [button setBackgroundImage:buttonImage forState:UIControlStateNormal];
    [button setBackgroundImage:buttonPressedImage forState:UIControlStateHighlighted];

    [button setTitle:t forState:UIControlStateNormal];

    [button addTarget:tgt action:a forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    return [buttonItem autorelease];
}

答案 1 :(得分:3)

这里的问题是,UIBarButtonItem不是UIView-Subclass。 我也有同样的问题,解决方案非常简单:

使用自定义背景图像创建UIButton对象,然后使用其initWithCustomView:方法创建UIBarButtonItem的实例,并将UIButton对象作为参数传递。

希望我能帮助你。

答案 2 :(得分:2)

将UIButton拖出到IB中的UIToolBar,然后对其进行格式化并分配选择器并将其拖入UIToolBar。,。,,这对我有用!!

答案 3 :(得分:0)

我在导航栏中遇到了与UIBarButton相同的问题。 我使用了kaar3k提供的解决方案。谢谢kaar3k。 将一个UIButton拖放到Storybaord中的NavBar,然后对其进行格式化并分配选择器并将其拖到NavBar !!