我在iOS 6中发现了奇怪的行为,没有对其他版本进行测试。我用视图创建了一个简单的基于导航的应用程序。当我点击第一个视图上的按钮时,会按下第二个视图。然后我点击后退按钮我返回到第一个视图。两个视图都嵌套在DetailViewConotrller中。
@implementation DetailViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *searchCancelButton = [[UIBarButtonItem alloc] initWithTitle:@"custom1" style:UIBarButtonItemStyleBordered target:self action:nil];
[searchCancelButton setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
UIBarButtonItem *searchCancelButton1 = [[UIBarButtonItem alloc] initWithTitle:@"custom2" style:UIBarButtonItemStyleBordered target:self action:nil];
[searchCancelButton1 setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
[self.navigationItem setRightBarButtonItems: [[NSArray alloc] initWithObjects:searchCancelButton, searchCancelButton1, nil] animated:NO];
}
@end
我用方法[self.navigationItem setRightButtonItems: animated:]
调用动画参数NO,但按钮仍然是动画。有趣的是,当只使用一个UIBarButtonItem调用此方法时,它的工作正确并且不会出现任何动画。
有没有想过为什么这种方法会这样表现?这是一个错误还是我做错了什么?或者是如何避免导航项目的动画的任何建议。
答案 0 :(得分:0)
只需将您的代码更改为:
- (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *searchCancelButton = [[UIBarButtonItem alloc] initWithTitle:@"custom1" style:UIBarButtonItemStyleBordered target:self action:nil];
[searchCancelButton setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
UIBarButtonItem *searchCancelButton1 = [[UIBarButtonItem alloc] initWithTitle:@"custom2" style:UIBarButtonItemStyleBordered target:self action:nil];
[searchCancelButton1 setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
[self.navigationItem setRightBarButtonItems: [[NSArray alloc] initWithObjects:searchCancelButton, searchCancelButton1, nil] animated:NO];
}
使用当前的实现,您可以将导航按钮设置两次。首先使用属性,然后调用方法。可能设置rightBarButtonItems作为带动画的setRightBarButtonItems。