9

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

4

3 回答 3

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];.

于 2009-07-31T22:08:15.177 回答
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;
   }
}
于 2011-09-17T20:08:07.267 回答
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)]; 
于 2012-06-22T08:17:26.573 回答