我使用Appdelegate中的以下代码在导航栏上为所有视图控制器设置按钮图像:
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)
现在在我的一个视图控制器中,我从库中选择一个新图像并保存.我希望只要我保存这个新图像,后退按钮的"图像"就会被这个'newimage'取代.
我尝试在每个视图控制器的viewWillAppear中跟踪代码
[self.navigationItem.backBarButtonItem setBackButtonBackgroundImage:newimage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)
并尝试过
[self.navigationItem.backBarButtonItem setImage:new];
Run Code Online (Sandbox Code Playgroud)
这个也是.但一切都是徒劳的.只有当我再次运行我的应用程序时才会更改图像,因此当Appdelegate中的代码被调用时.
Plz帮忙!
在完成几乎所有教程后,我仍然无法正确设置我的徽章。情况是这样的 - 当我的应用程序在后台时,我希望我的徽章增加 1。所以我使用下面的代码行
NSLog(@"In didReceiveRemoteNotification badge number is %ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber);
[UIApplication sharedApplication].applicationIconBadgeNumber += [[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] integerValue];
NSLog(@"In didReceiveRemoteNotification badge number is %ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber);
Run Code Online (Sandbox Code Playgroud)
这两个 NSLog 分别给我值 1 和 2。即使在设置 applicationIconBadgeNumber 之前它怎么会得到 1 ?因此,在收到单个通知时,它会显示 2 作为徽章。
为了让我的问题更清楚,我发布了在 - didReceiveRemoteNotification 中完成的整个代码
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler{
if ((application.applicationState == UIApplicationStateBackground)) {
NSLog(@"===========================");
NSLog(@"App was in BACKGROUND...");
NSLog(@"In didReceiveRemoteNotification badge number is %ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber);
[UIApplication sharedApplication].applicationIconBadgeNumber += [[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] integerValue];
NSLog(@"In didReceiveRemoteNotification badge number is %ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber); …Run Code Online (Sandbox Code Playgroud)