0

对于我的 iOS 7 应用程序,我有一个 UIToolbar 包含一组 UIBarButtonItems,并且对于一个特定的项目,我希望有一个自定义的外观。

我只想将项目放在情节提要上,并指定其类,而不通过代码对 UIToolbar 进行操作。一种选择是使用外观,但不幸的是它会导致更改所有 UIBarBUttonItem。

一些旧的 SO 帖子建议继承 UIBarButtonItem 并使用 drawRect,这将是理想的解决方案,但不幸的是,这种方法似乎根本没有被调用。

4

2 回答 2

1

我知道您的问题现在很可能已经解决了,但是使用 Xcode 6,您现在可以随心所欲地做事了!

Xcode 6 允许使用宏IB_DESIGNABLEIBInspectable自定义您可以在 Interface Builder 的检查器中更改的内容!

只需IBInspectable在属性的类型声明之前定义(在 .h 中)以将该属性公开给 IB,然后设置它。

如果您IB_DESIGNABLE在 之前定义@interface,您还可以在 IB 中看到对该自定义属性的更改

下面的例子应该提供你想要做的,住在 Xcode 6 的 IB 中:

MyBarButtonItem.h

#import <UIKit/UIKit.h>

IB_DESIGNABLE @interface MyBarButtonItem : UIBarButtonItem

@property (nonatomic, retain) IBInspectable UIImage *backgroundImage;

@end

MyBarButtonItem.m

#import "MyBarButtonItem.h"

@implementation MyBarButtonItem

-(void)setBackgroundImage:(UIImage *)backgroundImage {
    [self setBackgroundImage:backgroundImage
                    forState:UIControlStateNormal
                  barMetrics:UIBarMetricsDefault];
}

-(UIImage *)backgroundImage {
    return [self backgroundImageForState:UIControlStateNormal
                              barMetrics:UIBarMetricsDefault];
}

@end

对上述代码的轻微免责声明:出于显而易见的原因,这仅为条形指标和硬编码的控制状态定义了背景图像。

有关更直观的示例,请参阅 Apple 的以下文档:

https://developer.apple.com/library/ios/recipes/xcode_help-IB_objects_media/chapters/CreatingaLiveViewofaCustomObject.html#//apple_ref/doc/uid/TP40014224-CH41-SW1

于 2014-10-13T03:20:55.790 回答
0

您想要的是使用 [UIImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 设置图像,这样就不会发生外观代理着色,并且您可以控制按钮图像。

不幸的是,我看不到这可以通过 XIB 完成……但如果您可以通过代码访问按钮,请执行以下操作:

[myBarButton setImage:[[UIImage imageNamed:@"yourButtonImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];

其中 myBarButton 是您的 UIBarButtonItem,而 yourButtonImage.png 是您的条形按钮图像。此图像将显示为未着色。

于 2013-10-21T16:48:58.333 回答