从任何类访问标签栏徽章 - iOS

时间:2015-11-13 11:49:06

标签: ios objective-c uitabbarcontroller uitabbar nsobject

我有一个基于标签栏视图控制器的应用程序。我在应用程序中有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。

1 个答案:

答案 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类。