如何在导航栏后退按钮中显示自定义图像,而不是导航栏本身显示的默认按钮

时间:2009-07-31 17:30:16

标签: iphone image uinavigationcontroller back-button

导航到已实施导航控制器的应用中的任何视图时,它会显示一个后退按钮以转到上一个视图。有没有办法可以使用自定义图像而不是默认图像?

3 个答案:

答案 0 :(得分:18)

是的,你可以。

通过设置其导航项的后栏按钮项(您可以自定义标题或使用图像),可以控制在给定视图控制器上按下另一个视图控制器时标准后退按钮的外观:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = btn;
[btn release];

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = btn;
[btn release];

注意:您可以在“父”视图控制器中对其进行配置,该控制器可能在其上方按下其他视图控制器。配置在“父”中完成,当某些视图控制器位于顶部时,后退按钮的外观会发生变化。点击后退按钮可以按预期返回。


您还可以创建自己的UIBarButtonItem并将其设置为当前视图控制器上导航栏上的leftButtonItem:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:self action:@selector(yourMethod:)];
self.navigationItem.leftBarButtonItem = btn;
[btn release];

注意:在这种情况下,当前视图控制器的后/左栏按钮项目会更改(当它在顶部时)。您必须实现yourMethod:方法。如果您只想让按钮返回,则必须通过调用[self.navigationController popViewControllerAnimated:YES];来自行弹出视图控制器。

答案 1 :(得分:3)

我发现没有一个解决方案实际解决了BACK UIBarButton,并且如果视图控制器是root,它也提供了隐藏的行为。

-(void)popViewControllerWithAnimation {
[self.navigationController popViewControllerAnimated:YES];
}

- (void)viewWillAppear:(BOOL)animated
{
   [super viewWillAppear:animated];
   if([self.navigationController.viewControllers objectAtIndex:0] != self)
   {
       UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 26, 26)];
       [backButton setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal];
       [backButton setShowsTouchWhenHighlighted:TRUE];
       [backButton addTarget:self action:@selector(popViewControllerWithAnimation) forControlEvents:UIControlEventTouchDown];
       UIBarButtonItem *barBackItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
       self.navigationItem.hidesBackButton = TRUE;
       self.navigationItem.leftBarButtonItem = barBackItem;
   }
}

答案 2 :(得分:0)

它几乎像后退按钮一样工作。除了过渡动画(点击按钮后,当前视图从右侧导航中弹出)。

正确的方法是制作一个类别。

@interface UINavigationBar (MyNavigationBar)  
-(void)drawRect:(CGRect)rect; 
@end

@implementation UINavigationBar (MyNavigationBar)
-(void)drawRect:(CGRect)rect { 
UIImage *image = [UIImage imageNamed:@"....."];  
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];