UIBarButtonItem设计更改第一次不起作用,但第二次

时间:2013-09-17 12:23:58

标签: ios objective-c uistoryboard uibarbuttonitem

我想更改UIBarButtonItem的设计,并且它对此代码有所帮助:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *image = [[UIImage imageNamed:@"header.png"]  resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];
    [[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
}

问题是,应用程序第一次加载按钮的背景图像时不会改变,但如果我离开视图并返回,则背景会改变为我想要的。这里的问题是什么?我使用故事板。

2 个答案:

答案 0 :(得分:3)

要使用UIAppearance,您应该在加载视图或创建控件之前设置控件的外观。如果您以编程方式创建控件,则可以执行(示例代码)

 [[UIStepper appearance]setTintColor:[UIColor redColor]];
 UIStepper *stepper = [[UIStepper alloc]init];
 [self.view addSubview: stepper];

或尝试在application didFinishLaunchingWithOptions中设置外观。

来自UIAppearance.h

  

要自定义容器类实例或层次结构中实例所包含的类的实例的外观,请使用+ appearanceWhenContainedIn:作为相应的外观代理。例如:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:myNavBarColor];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIPopoverController class], nil] setTintColor:myPopoverNavBarColor];
[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setTintColor:myToolbarColor];
[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], [UIPopoverController class], nil] setTintColor:myPopoverToolbarColor];

答案 1 :(得分:0)

在开始上课之前调用代码 - 在课堂之外。