首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TTLauncherItem:立即更改徽章(或:如何刷新TTLauncherView)

TTLauncherItem:立即更改徽章(或:如何刷新TTLauncherView)
EN

Stack Overflow用户
提问于 2010-06-08 16:05:26
回答 2查看 1K关注 0票数 2

我有一个TTLauncherView和一些TTLauncherItems。这些显示标记,表示来自网络的消息。我在viewWillAppear:中设置了徽章,所以如果切换到另一个视图,然后返回,就会显示正确的徽章。但我想在收到信息后更新徽章。

打电话给setNeedsDisplay on TTLauncherView没有帮助吗?

如何刷新TTLauncherView

在我的MessageReceiver课程中,我这样做:

代码语言:javascript
复制
TTNavigator* navigator = [TTNavigator navigator];

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

我的TTViewController派生的OverviewController

代码语言:javascript
复制
@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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-08 18:19:55

我在LauncherView上注册了控制器,在AppDelegate上注册。在我的消息类中,我调用了[appDelegate reloadLauncherView];,它将再次调用这个

代码语言:javascript
复制
-(void)reloadLauncherView
{
    [self viewWillAppear:NO ];
}

在包含LauncherView的控制器上。

票数 1
EN

Stack Overflow用户

发布于 2011-08-29 21:34:49

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2999082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档