Ios 自定义UITableViewCell会产生问题
概述Ios 自定义UITableViewCell会产生问题,ios,objective-c,xcode,uitableview,Ios,Objective C,Xcode,Uitableview,概述 我正在使用自定义的UITableViewCell创建一个UITableView(在iOS 8.4中,Objective-C)。我已经为自定义单元格中的每个项目创建了IBoutlets。它似乎工作正常,但我的UIButton会随机从自定义单元格中消失。 这里是我的CellForRowAtIndexPath代码 这是我的屏幕截图 提前谢谢如果您需要更多信息,请告诉我。您在-(UITableViewCell*)tableView:(UITableView*)tableView cell f
我正在使用自定义的
UITableViewCell
创建一个UITableView
(在iOS 8.4中,Objective-C)。我已经为自定义单元格中的每个项目创建了IBoutlets
。它似乎工作正常,但我的UIButton会随机从自定义单元格中消失。这里是我的CellForRowAtIndexPath代码
这是我的屏幕截图
提前谢谢如果您需要更多信息,请告诉我。您在
-(UITableViewCell*)tableView:(UITableView*)tableView cell for row索引路径:(nsindepath*)indepath
方法中做得太多了。为自定义单元格提供一种配置方法是一种很好的做法,如-(void)configureCell
,其中将定义单元格的内容和布局。换句话说,让单元格负责(尽可能多地)其内容和布局,而不是tableview
我想这部分会引起问题:
if([AFNetworkReachabilityManager sharedManager].isReachable) {
...
}
特别是:
[self MakeCallAndSetImageToImageView:indexPath ToGetImageFromURL:[info valueForKey:@"copied_url"]];
我不知道这个方法的实现,但我觉得你必须看看那边,因为在检索你请求的图像时可能会出现线程问题
还有一个提示:命名类和方法的方式并不总是遵循Objective-C约定。检查
linkCell
(类)和MakeCallAndSetImageToImageView…
(方法)。可能的布局已损坏。尝试捕获视图层次结构。在Xcode中:调试>视图调试>捕获视图层次结构
此外,方法dequeueReusableCellWithIdentifier:forIndexPath:始终返回有效的单元格。如果(!cell){…}永远不会执行,您可以将其删除。尝试使用此GCD块,我认为它会工作
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Do data fetching and calculation
dispatch_async(dispatch_get_main_queue(), ^(void) {
//Update UI on main thread
});
});
过了很长时间,我发现我的代码中有错误。我设置了
buttonview
tagindexath.row
,也给了button
tag同样的设置。当didselectrowatinexpath
被调用时,我正在做
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
linkCell*cell = (linkCell*)[tableView cellForRowAtIndexPath:indexPath];
if([selectedRow isEqual:indexPath]){
selectedRow = nil;
//this is where i'm mistaking.
[[cell viewWithTag: indexPath.row]setAlpha:1];
}else{
selectedRow = indexPath;
//this is where i'm mistaking.
[[cell viewWithTag: indexPath.row]setAlpha:0];
}
[tableView reloadData];
}
因此,我将-1
标记赋予按钮视图
,问题就解决了。if([selectedRow isEqual:indexPath]){
selectedRow = nil;
[[cell viewWithTag: -1]setAlpha:1];
}else{
selectedRow = indexPath;
[[cell viewWithTag: -1]setAlpha:0];
}
顺便说一句,感谢您提供的有价值的提示和建议。删除并尝试
if(!cell){cell=[[linkCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@“cell”];}
将表视图单元格作为自定义单元格我应该在哪里使用此GCD?Vats块,我认为这取决于你想在哪里使用它,也就是说,你可以在你想使用后台线程和主线程的地方使用它,正如我提到的,你可以在DISPATCH_QUEUE_PRIORITY_DEFAULT中进行数据的计算和取数,并在主线程上更新你的ui。
if([selectedRow isEqual:indexPath]){
selectedRow = nil;
[[cell viewWithTag: -1]setAlpha:1];
}else{
selectedRow = indexPath;
[[cell viewWithTag: -1]setAlpha:0];
}