子视图未显示在已显示的视图上

时间:2011-08-23 17:14:19

标签: iphone ios subview

我是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];
}
}

迈克尔

2 个答案:

答案 0 :(得分:0)

这可能无法解决您的问题。

然而,我可以看到一个小故障。 CGRectMake(50,100,55,12)将创建一个12px的直径但高度为55px的矩形。

嗯,至少“te”或“tes”你的文字应该是可见的,因为我没有看到任何昆虫。有一些昆虫值(大约10个),可能会发现你的文本字符串是可见的。

或者没有。剪切文本时,根据默认的换行模式,可以将其截断到某个范围,并在末尾添加一些“...”。 难道你只看到一些点而不是“测试测试”吗?

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

但在进行任何进一步的测试之前,给它一些可能20,100的逼真矩形,只是为了保存。

答案 1 :(得分:0)

我发现问题所在:处理通知的代码(以及修改UI)未在主线程上处理。

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

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