3

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

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

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

谢谢泰穆尔

4

4 回答 4

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];
}
于 2010-06-22T17:26:58.970 回答
3

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

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

希望我能帮助你。

于 2010-06-22T14:35:18.120 回答
2

在 IB 中将 UIButton 拖放到 UIToolBar 之外,然后对其进行格式化并分配选择器并将其拖入 UIToolBar .,.,, 这对我有用!!

于 2012-07-23T07:03:42.417 回答
0

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

于 2015-01-08T15:38:18.497 回答