我有一个基于标签栏视图控制器的应用程序。我在应用程序中有3个主视图控制器和一个类型为NSObject
的自定义类(称为“DataManager”)。
由于我的DataManager类处理所有数据,我想只更新该类的标签栏徽章(而不是视图控制器)。
但是,我无法从自定义类访问标签栏视图控制器。有没有办法可以做到这一点?
这是我的代码(DataManger - 标题):
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface DataManager : NSObject <UITabBarControllerDelegate> {
}
// Trolley data methods.
-(NSMutableArray *)get_trolley_data;
-(void)update_trolley:(NSMutableArray *)data;
-(int)get_trolley_size;
// Data check methods.
-(NSString *)text_check:(NSString *)data :(int)type;
// Tab bar methods.
-(void)update_badge;
@end
以下是实施代码:
#import "DataManager.h"
@implementation DataManager
/*
other methods.......
*/
/// TAB BAR METHODS ///
-(void)update_badge {
// Get the trolley size.
int num = [self get_trolley_size];
// Set the tab bar number badge.
UITabBarItem *tab_bar = [[self.tabBarController.viewControllers objectAtIndex:1] tabBarItem];
// Show the badge if the count is
// greater than 0 otherwise hide it.
if (num > 0) {
[tab_bar setBadgeValue:[NSString stringWithFormat:@"%d", num]];
}
else {
[tab_bar setBadgeValue:nil];
}
return;
}
@end
我收到以下错误:
在'DataManager'类型的对象上找不到属性'tabBarController' *”。
那么有没有办法可以从我的自定义类访问标签栏控制器?如果我尝试从视图控制器更新标签栏徽章,那么我最终会多次复制上述方法,这只是愚蠢的。
谢谢你的时间,Dan。
答案 0 :(得分:2)
试试此代码
-(void)update_badge {
// Get the trolley size.
int num = [self get_trolley_size];
// Get RootViewController That is surely your tabbarcontroller
UITabBarController *tabBarController =(UITabBarController*)[[(YourAppDelegate*)
[[UIApplication sharedApplication]delegate] window] rootViewController];
// Set the tab bar number badge.
UITabBarItem *tab_bar = [[tabBarController.viewControllers objectAtIndex:1] tabBarItem];
// Show the badge if the count is
// greater than 0 otherwise hide it.
if (num > 0) {
[tab_bar setBadgeValue:[NSString stringWithFormat:@"%d", num]];
}
else {
[tab_bar setBadgeValue:nil];
}
return;
}
注意:必须将YourAppDelegate
替换为您的实际AppDelegate
类。