我目前遇到问题时遇到了困难。
我在里面创建了一个包含2个容器的视图是一个UITableView,另一个显示了考虑第一个选择的信息。
除非我滑动删除(实际上我没有尝试删除行,但只是为了重置对象中包含的信息 - 一个图像列表) - 并在左侧容器上刷新视图以显示重置已完成。
此时该过程会删除必须删除的内容以及所有内容(同时刷新用户界面),但有时在此事件之后我无法再选择列表中的任何对象,就好像表格是不再启用用户交互(我尝试使用断点时不再接收事件)。但视图的其余部分仍然有效(我仍然可以点击右侧容器的按钮等)。此外,如果我点击我的按钮打开相机,当我回来时,视图再次正常工作。有什么方法可以让我的刷新以某种方式卡住?
Xcode没有给我任何停止,所以程序继续工作。
我真的不知道要显示什么代码(我没有提供所有代码,但我认为所有代码都很重要):
@implementation PJTableViewController
{
NSIndexPath *selectedRow;
NSMutableArray *tableData;
}
@synthesize attachmentShow, attachments, listPJ;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadTableView)
name:@"reloadLeftContainer"
object:nil];
selectedRow = [NSIndexPath indexPathForRow:0 inSection:0];
if( attachments != nil )
{
tableData = attachments.mutableCopy;
}
[listPJ setScrollEnabled:YES];
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self selectCurrentRow];
}
// Selection
-(void) selectCurrentRow
{
NSIndexPath *indexPath = selectedRow;
[listPJ selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[self tableView:listPJ didSelectRowAtIndexPath:indexPath];
}
//Reload
-(void) reloadTableView
{
[listPJ performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
[self selectCurrentRow];
}
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
selectedRow = [tableView indexPathForSelectedRow];
NSDictionary *dictionary = tableData[indexPath.section];
Attachment *att = (Attachment*)[dictionary objectForKey:[dictionary allKeys][0]][indexPath.row];
if( att )
[attachmentShow setAttachment:att];
}
-(BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *dictionary = tableData[indexPath.section];
Attachment *att = (Attachment*)[dictionary objectForKey:[dictionary allKeys][0]][indexPath.row];
if( att.attachmentsPath.count == 0)
return NO;
return YES;
}
-(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *dictionary = tableData[indexPath.section];
Attachment *att = (Attachment*)[dictionary objectForKey:[dictionary allKeys][0]][indexPath.row];
// Reset Attachment
if( att.attachmentsPath.count > 0)
{
[att resetAttachment];
[attachmentShow setAttachment:att];
[self reloadTableView];
}
}
[att resetAttachment];
此行允许我重置附件内容。
[attachmentShow setAttachment:att];
这一行允许我使用新信息将更新设置为正确的容器。
答案 0 :(得分:2)
使用-reloadRowsAtIndexPaths:withRowAnimation:
。当您更新特定内容时,切勿重新加载整个tableView。