2015-06-10 128 views
6

我导航栏上的所有视图控制器使用的appdelegate下面的代码设置后退按钮图像:如何设置图像默认后退导航栏的按钮

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

在我看来,一个控制器现在我从画廊中挑选一幅新图片并保存。我希望只要我保存这个新图像,后面按钮的'图像'就被这个'newimage'取代。

我试图在每个viewWillAppear中下面的代码和每个视图控制器

[self.navigationItem.backBarButtonItem setBackButtonBackgroundImage:newimage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

并试图

[self.navigationItem.backBarButtonItem setImage:new]; 

这一点。但一切都是徒劳的。 只有当我再次运行我的应用程序时,图像才会被更改,因此Appdelegate中的代码被调用。

Plz help!

回答

5

最后落得这样做是这样的:

AppDelegate删除了代码,增加了按照每个viewWillAppear行代码每视图控制器现在

UIBarButtonItem * barButtonItem = [[UIBarButtonItem alloc] initWithImage:newimage 
                    style:UIBarButtonItemStylePlain 
                    target:self 
                    action:@selector(goBack)]; 
[self.navigationItem setLeftBarButtonItem:barButtonItem]; 

后退按钮无线LL不再工作,所以它的功能,必须在@selector 'goBack'

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

尝试设置的UIBarButtonItem像这样在ios7: -

UIImage *temp = [[UIImage imageNamed:@"theImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];  
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:temp style:UIBarButtonItemStyleBordered target:self action:@selector(action)]; 

这里是一个原始帖子在苹果开发中心论坛

为了支持这两个版本iOS7以及较低的,那么你检查系统-version并设置代码,如: -

UIImage *temp=nil; 

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) 
{ 
    temp = [UIImage imageNamed:@"btn-back.png"]; 
} 
else 
{ 
    temp = [[UIImage imageNamed:@"btn-back.png"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]; 
} 
1

你需要把你的代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

它会正常工作。

0

请务必打电话给你的UI相关的主线程方法:

dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.navigationItem.backBarButtonItem setBackButtonBackgroundImage:newimage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
     }); 
15

明确规定,需要设置自定义外观集自身背面图像按钮。并调用appdelegate.h文件。

说明:您需要在appdelegate.h中设置一次,然后应用于整个项目中。不需要在每个控制器中声明。

请检查此。

//in Appdelegate.h file 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
[self customappearance]; //Method declaration 
} 

并在自定义外观中声明具有图像名称的图像。像这样,

-(void)customappearance 
{ 
//int imageSize = 20; 
UIImage *myImage = [UIImage imageNamed:@"icon_back"]; //set your backbutton imagename 
UIImage *backButtonImage = [myImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
// now use the new backButtomImage 
[[UINavigationBar appearance] setBackIndicatorImage:backButtonImage]; 
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButtonImage]; 


/* 
UIImage *backbutton=[[UIImage imageNamed:@"icon_back"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch]; 

//resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch]; 

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backbutton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];*/ 
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0) 
                forBarMetrics:UIBarMetricsDefault]; 

} 

和您的导航栏后退按钮看起来像这样。

Custom back image in navigation bar

+1

这应该是正确的答案!!!! – hyd00