2010-06-08 63 views
2

我有一个TTLauncherView与一些TTLauncherItems。这些显示徽章,表示来自网络的消息。我在viewWillAppear:中设置了徽章,因此如果我切换到另一个视图然后返回,则会显示正确的徽章。但是我想尽快更新徽章。TTLauncherItem:立即更换徽章(或:如何刷新TTLauncherView)

在TTLauncherView上调用setNeedsDisplay没有帮助吗?

如何更新TTLauncherView

我MessageReceiver类

我这样做:

TTNavigator* navigator = [TTNavigator navigator]; 

      [(OverviewController *)[navigator viewControllerForURL:@"tt://launcher"] reloadLauncherView] ; 

我TTViewController衍生OverviewController

@implementation OverviewController 


- (id)init { 
    if (self = [super init]) { 
    self.title = OverviewTitle; 
    } 
    return self; 
} 

- (void)dealloc { 
    [items release]; 
    [overView release]; 
    [super dealloc]; 
} 


-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    overView = [[TTLauncherView alloc] initWithFrame:self.view.bounds]; 
    overView.backgroundColor = [UIColor whiteColor]; 
    overView.delegate = self; 
    overView.columnCount = 4; 

    items = [[NSMutableArray alloc] init]; 
    for(int i = 1; i <= NumberOfBars; ++i){ 
     NSString *barID = [NSString stringWithFormat:NameFormat, IDPrefix, i]; 
     TTLauncherItem *item = [[[TTLauncherItem alloc] initWithTitle:barID 
                   image:LogoPath 
                    URL:[NSString stringWithFormat:@"tt://item/%d", i] 
                  canDelete:NO] autorelease]; 
     [barItems addObject: item]; 


    } 
    overView.pages = [NSArray arrayWithObject:items]; 
    [self.view addSubview:overView]; 

} 

-(void)viewWillAppear:(BOOL)animated 
{ 


    for(int i = 0; i <[barItems count]; i++){ 
     TTLauncherItem *item = [items objectAtIndex:i]; 
     NSString *barID = [NSString stringWithFormat:NameFormat, IDPrefix, i+1]; 
     P1LOrderDispatcher *dispatcher = [OrderDispatcher sharedInstance]; 
     P1LBarInbox *barInbox = [dispatcher.barInboxMap objectForKey:barID]; 
     item.badgeNumber = [[barInbox ordersWithState:OrderState_New]count]; 
    } 
    [super viewWillAppear:animated]; 
} 


- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item 
{ 
    TTDPRINT(@"%@", item); 
    TTNavigator *navigator = [TTNavigator navigator]; 
    [navigator openURLAction:[TTURLAction actionWithURLPath:item.URL]]; 
} 

-(void)reloadLauncherView 
{ 

    [overView setNeedsDisplay];//This doesn't work 
} 
@end 

回答

1

我找到了解决自己。

我注册我的控制器与AppDelegate的LauncherView。在我的消息类我称之为[appDelegate reloadLauncherView];一遍会调用这个

-(void)reloadLauncherView 
{ 
    [self viewWillAppear:NO ]; 
} 
在包含LauncherView控制器

+0

请问您可以提供一些示例代码来解决这个问题吗? – 2011-03-10 10:21:03

0

今天我有一个非常类似的问题(修改TTLauncherItem,并没有看到我的更改直接),并能够通过调用[myLauncherView layoutSubviews];之前,我修改TTLauncherItem解决它。我实际上在代码中追踪了它,这是因为layoutSubviews将重新创建LauncherView的_buttons数组(这是我需要发生的事情)。

希望这可以帮助未来的人!