TableView reloadData 不会在 iPad 中更新 UI,但在 iPhone 中有效
TableView reloadData doesn't update UI in iPad , but works in iPhone
我有一个奇怪的错误。我正在使用 UITableView
,当一行得到 selected 时必须重新加载。这在 iPhone 模拟器中工作正常。当 iPad 中的 运行 被调用时, didSelectRowAtIndexPath
被调用但 UI 没有被更新。
我尝试在主线程上调用方法 reloadData
。还是一样。
我在 Whosebug 中尝试了各种解决方案。似乎没有什么能解决我的问题。
更新
当我select一个单元格时,将添加新的单元格。所以我需要重新加载我的 tableview 来显示动态变化。
在下面发布我的代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath
{
NSUInteger count=indexPath.row+1;
NSMutableArray *insertIndexPaths = [NSMutableArray array];
[insertIndexPaths addObject:[NSIndexPath indexPathForRow:count inSection:indexPath.section]];
switch (indexPath.row) {
case 0:
{
if ([ItemsInSection[indexPath.section] count]==1){
[ItemsInSection[indexPath.section] addObject:obj2];
[TabView beginUpdates];
[TabView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft];
[TabView endUpdates];
}
else {
[ItemsInSection[indexPath.section] removeAllObjects];
[ItemsInSection[indexPath.section] addObject:obj1];
[self.TabView reloadData];
}
}
break;
case 1:
{if ([ItemsInSection[indexPath.section] count]==2){
[ItemsInSection[indexPath.section] addObject:obj3];
[self.TabView beginUpdates];
[TabView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft];
[self.TabView endUpdates];
}
else
{
[ItemsInSection[indexPath.section] removeAllObjects];
[ItemsInSection[indexPath.section] addObject:obj1];
[ItemsInSection[indexPath.section] addObject:obj2];
[self.TabView reloadData];
}
}
break;
case 2: {
if ([ItemsInSection[indexPath.section] count]==3) {
[ItemsInSection[indexPath.section] addObject:obj4];
[self.TabView beginUpdates];
[TabView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft];
[self.TabView endUpdates];
}
else
{
[ItemsInSection[indexPath.section] removeObject:obj4];
[self.TabView beginUpdates];
[TabView deleteRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft];
[self.TabView endUpdates];
}
}
break;
default:
break;
}
}
您正在 table 视图委托中重新加载 table 视图,在 table 视图选择委托方法上有其关联的选择动画过程。所以我会建议你将这个方法中的所有代码移动到单独的方法中。并调用该方法。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{
[self.aiTableView beginUpdates];
// your table view selection code
[self.aiTableView endUpdates];
});
我已找到解决此问题的方法。
UITableViewCell
的背景色设置为透明色,UITableViewCell
上的 UIView
的背景色也设置为透明色。更改这些设置会在 iPad 模拟器中显示 UITableView
中的行插入。
我有一个奇怪的错误。我正在使用 UITableView
,当一行得到 selected 时必须重新加载。这在 iPhone 模拟器中工作正常。当 iPad 中的 运行 被调用时, didSelectRowAtIndexPath
被调用但 UI 没有被更新。
我尝试在主线程上调用方法 reloadData
。还是一样。
我在 Whosebug 中尝试了各种解决方案。似乎没有什么能解决我的问题。
更新
当我select一个单元格时,将添加新的单元格。所以我需要重新加载我的 tableview 来显示动态变化。 在下面发布我的代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath
{
NSUInteger count=indexPath.row+1;
NSMutableArray *insertIndexPaths = [NSMutableArray array];
[insertIndexPaths addObject:[NSIndexPath indexPathForRow:count inSection:indexPath.section]];
switch (indexPath.row) {
case 0:
{
if ([ItemsInSection[indexPath.section] count]==1){
[ItemsInSection[indexPath.section] addObject:obj2];
[TabView beginUpdates];
[TabView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft];
[TabView endUpdates];
}
else {
[ItemsInSection[indexPath.section] removeAllObjects];
[ItemsInSection[indexPath.section] addObject:obj1];
[self.TabView reloadData];
}
}
break;
case 1:
{if ([ItemsInSection[indexPath.section] count]==2){
[ItemsInSection[indexPath.section] addObject:obj3];
[self.TabView beginUpdates];
[TabView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft];
[self.TabView endUpdates];
}
else
{
[ItemsInSection[indexPath.section] removeAllObjects];
[ItemsInSection[indexPath.section] addObject:obj1];
[ItemsInSection[indexPath.section] addObject:obj2];
[self.TabView reloadData];
}
}
break;
case 2: {
if ([ItemsInSection[indexPath.section] count]==3) {
[ItemsInSection[indexPath.section] addObject:obj4];
[self.TabView beginUpdates];
[TabView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft];
[self.TabView endUpdates];
}
else
{
[ItemsInSection[indexPath.section] removeObject:obj4];
[self.TabView beginUpdates];
[TabView deleteRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationLeft];
[self.TabView endUpdates];
}
}
break;
default:
break;
}
}
您正在 table 视图委托中重新加载 table 视图,在 table 视图选择委托方法上有其关联的选择动画过程。所以我会建议你将这个方法中的所有代码移动到单独的方法中。并调用该方法。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{
[self.aiTableView beginUpdates];
// your table view selection code
[self.aiTableView endUpdates];
});
我已找到解决此问题的方法。
UITableViewCell
的背景色设置为透明色,UITableViewCell
上的 UIView
的背景色也设置为透明色。更改这些设置会在 iPad 模拟器中显示 UITableView
中的行插入。