我有一个TTLauncherView和一些TTLauncherItems。这些显示标记,表示来自网络的消息。我在viewWillAppear:中设置了徽章,所以如果切换到另一个视图,然后返回,就会显示正确的徽章。但我想在收到信息后更新徽章。
打电话给setNeedsDisplay on TTLauncherView没有帮助吗?
如何刷新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发布于 2010-06-08 18:19:55
我在LauncherView上注册了控制器,在AppDelegate上注册。在我的消息类中,我调用了[appDelegate reloadLauncherView];,它将再次调用这个
-(void)reloadLauncherView
{
[self viewWillAppear:NO ];
}在包含LauncherView的控制器上。
发布于 2011-08-29 21:34:49
今天我遇到了一个非常类似的问题,(修改TTLauncherItem,没有直接看到我的更改),并且在修改TTLauncherItem之前通过调用[myLauncherView layoutSubviews];来解决这个问题。实际上,我在代码中跟踪了它,这是因为layoutSubviews将重新创建LauncherView的_buttons数组(在我的例子中,这是需要实现的)。
https://stackoverflow.com/questions/2999082
复制相似问题