2011-08-23 154 views
0

我是新的iPhone开发,我坚持与控制器通知刷新这些项目后不显示子视图。子视图没有显示在已经显示的视图

所以,这是我的主页显示,显示底部新闻源的3最后一项。 视图控制器处理新闻源的加载(在NSArray中)。 加载页面时,新闻源被正确显示为主视图的子视图。但是,当视图已经存在时(例如第一次登录后),新闻源不会显示或刷新。从互联网异步获取的头像图像显示正确。但不是标签。

调试表明代码正确执行......但没有任何反应......

这里是处理通知并刷新代码。

我敢肯定,我错过了一些愚蠢的东西,但不能把我的手指放在它上面。 子视图的UILabel或UIImage是否可以避免元素被刷新?

感谢您的帮助!

但是控制器代码

-(void) handleRefreshNewsfeed:(NSNotification*)notification{ 

if (self.newsfeedMostRecentDate == nil){ 
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyyMMdd HH:mm"]; 
    self.newsfeedMostRecentDate = [dateFormatter dateFromString:@"20100101 00:00"]; 
    [dateFormatter release]; 
} 
NSArray * newsfeed = [cdw getNewsfeedForUser:self.currentUser andLimit:self.newsfeedLimit]; 
if ([newsfeed count] > 0){ 
    self.newsfeedMostRecentDate = [(Newsfeed *)[newsfeed objectAtIndex:0] posted]; 
    if ([self.view isKindOfClass:[MenuView class]]){ 
     [(MenuView *)self.view refreshNewsfeed:newsfeed]; 
    } 
} 

}

主视图声明:

@interface MenuView : UIView { 
MenuNewsfeed    * newsFeedView; 
} 
@property(nonatomic, retain) IBOutlet MenuNewsfeed *newsFeedView; 

-(void)displayNewsfeed:(NSArray *)newsfeed; 
-(void)refreshNewsfeed:(NSArray *)newsfeed; 

主视图代码:

-(void)displayNewsfeed:(NSArray *)newsfeed{ 
[self.newsFeedView setCurrentUser:currentUser]; 
[self.newsFeedView displayNewsfeed:newsfeed]; 

[UIView animateWithDuration:0.75f 
    delay: 0.0 
     options: UIViewAnimationOptionCurveEaseIn 
    animations:^{ 
     self.newsFeedView.alpha = 1.0; 
    } 
    completion:^(BOOL finished){ 
     //nothing 
    } 
]; 
} 

-(void)refreshNewsfeed:(NSArray *)newsfeed{ 

if ([self.newsFeedView.newsfeed count] > 0){ 
    [UIView animateWithDuration:0.50f 
     delay: 0.0 
      options: UIViewAnimationOptionCurveEaseIn 
     animations:^{ 
      self.newsFeedView.alpha = 0.0; 
     } 
     completion:^(BOOL finished){ 
      // [self displayNewsfeed:newsfeed]; 
     } 
    ]; 
}else { 

    [self displayNewsfeed:newsfeed]; 
} 
} 

迈克尔

回答

0

这可能不会回答你的问题。

但是,我可以看到一个小毛病。 CGRectMake(50,100,55,12)将创建12px的矩形,但是55px的高度。

那么,至少你的文本的“te”或“tes”应该是可见的,因为我没有看到任何昆虫。有了一些昆虫的价值(10左右)可能会发生,你的文本字符串是可见的。

或没有。当文本被裁剪时,取决于默认的换行符模式,它可以被截断到某个特定的范围,最后添加一些“...”。 难道你只能看到一些点而不是“测试测试”吗?

否则,检查tmp标签是否被其他视图隐藏,尽管它应该位于视图堆栈顶部。

但是在做任何进一步的测试之前,给它一些现实的可能20,100,只是为了保存。

+0

感谢您的提示!我尝试了您的建议,并添加了黑色背景......但仍未显示。如果我的理解是正确的,addSubview方法将sbview添加到其他任何东西之上。所以我有点失落...... –

+0

嗯,是的。它会将它添加到子视图层的顶部。 是否有其他物品可见?你有没有尝试添加其他视图类型? 是否正确创建了self.view?或者由于某种原因它是零? –

+0

我已经检查过,一切都很好的声明...我会编辑我的帖子,把代码。 –

0

我发现了什么问题:处理通知(和修改UI)的代码没有在主线程上处理。

[self performSelectorOnMainThread:@selector(refreshNewsfeed) withObject:notification.object waitUntilDone:NO]; 

通过performSelectorOnMainThread调用刷新方法解决了这个问题。