我是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 :(得分: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方法解决了这个问题。