【发布时间】:2011-11-29 14:42:43
【问题描述】:
我已阅读“iOS 5 中的新增功能”文档,其中指出,现在可以更好地支持更改某些 UI 元素的背景。
我找不到 iOS 5 更改 UIToolbar 的背景图像的正确方法。是否有一种特殊的新 iOS 5 方法可以做到这一点?或者我还需要继承 UIToolbar 的子类吗?
【问题讨论】:
标签: ios background-image uitoolbar
我已阅读“iOS 5 中的新增功能”文档,其中指出,现在可以更好地支持更改某些 UI 元素的背景。
我找不到 iOS 5 更改 UIToolbar 的背景图像的正确方法。是否有一种特殊的新 iOS 5 方法可以做到这一点?或者我还需要继承 UIToolbar 的子类吗?
【问题讨论】:
标签: ios background-image uitoolbar
是的,有一种新方法可以做到这一点。您可以使用appearance 使所有UIToolBar 具有相同的外观。
首先,您必须确保您的班级遵循UIAppearanceContainer 协议。在这里,我在我的应用程序委托中完成了它:
@interface AppDelegate : UIResponder <UIApplicationDelegate, UIAppearanceContainer>
@property (strong, nonatomic) UIWindow *window;
@end
然后您可以设置外观,例如application:didFinishLaunchingWithOptions: 或viewDidLoad。像这样:
UIImage *image = [UIImage imageNamed:@"myimage.png"];
[[UIToolbar appearance] setBackgroundImage:image forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
您只需执行一次即可在您的应用中为所有UIToolBars 获得相同的外观。您还可以设置UIToolBar 的许多(如果不是全部?)属性。
作为旁注,有许多类可以遵循UIAppearanceContainer 协议。要查看使用外观协议可以自定义哪些内容,可以打开要自定义的类的头文件,如果可以设置属性为UIAppearance,则该属性在属性声明后面写有UI_APPEARANCE_SELECTOR。
【讨论】:
-[_UIAppearance setBackgroundImage:forBarMetrics:]: unrecognized selector sent to instance 0x903b8d0 2011-11-29 16:05:04.469 CatalogService[2998:fb03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_UIAppearance setBackgroundImage:forBarMetrics:]: unrecognized selector sent to instance 0x903b8d0' 我使用的代码是:[[UIToolbar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault];
UIToolBar 是否响应您的方法调用。例如:[UIToolBar appearance].tintColor = [UIColor redColor];
Property 'tintColor' not found on Object of type 'id' ... 看起来有问题。 UINaviagtionBar 在这种情况下工作。我可以根据需要设置所有属性。
这里有一个很棒的教程:http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5
基本上是这样的:
UIImage *gradientImage32 = [[UIImage imageNamed:@"surf_gradient_textured_32"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UINavigationBar appearance] setBackgroundImage:gradientImage32
forBarMetrics:UIBarMetricsDefault];
【讨论】: