我会尝试尽可能具体地描述我遇到的问题。这是我前段时间已经问过的问题,但没有得到任何答复。我指的是因为你会看到过去几天做过的一些编辑。旧问题已被删除,这是更新的问题。
首先,我想澄清这种情况偶尔会发生。这就是为什么我很难弄清楚究竟发生了什么。
我编写了一个iPhone应用程序,它使用UITableView
来显示一组用户可以触摸以触发某些功能的“按钮”和“设置”(很像Settings.app)。
它的问题在于,有时每当我向下滚动然后再向上时,应该显示在屏幕底部的一些单元格就会完全消失。
看起来设备“决定”它们不在屏幕上,因此停止显示它们(可能会解除它们吗?)。
另一个奇怪的事情是,这种情况从未发生在iPhone模拟器上,而它只发生在实际设备上并随机发生。当它发生时,它会在程序启动时发生(不是在以后的时间)并且一直发生,直到我从多任务栏关闭我的应用程序并再次启动它。
供参考,这是我的`tableView:cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
static NSString *SwitchCellIdentifier = @"SwitchCell";
UITableViewCell *cell = nil;
// Two separate cell pools, one for normal cells, one for cells with switches
if (indexPath.section <= sectionSettings && indexPath.row < indexTestMode)
{
cell = [tableView dequeueReusableCellWithIdentifier:SwitchCellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SwitchCellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.accessoryType = UITableViewCellAccessoryNone;
// Adds switches
UISwitch *aSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
[aSwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
cell.accessoryView=aSwitch;
}
}
else
{
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
cell.accessoryType = UITableViewCellAccessoryNone;
cell.accessoryView = nil;
cell.imageView.image = nil;
}
// Cell configuration
cell.textLabel.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
cell.textLabel.textAlignment = UITextAlignmentLeft;
// Sets section-specific styles
switch (indexPath.section)
{
... just some cell configuration (text, images, styles etc.)
}
return cell;
}
StackOverflow上建议的所有解决方案(我花了很多时间研究,真的)类似的问题都没有对我有用。
其他信息:
非常感谢任何帮助。
编辑(2012年7月17日):一些其他信息和截图。发生这种情况时,如果我触摸其中一个tableview单元格,另一个获取“选定”动画,但执行正确的操作。动作在“didSelectRowAtIndexPath”方法中实现,因此使用正确的“indexPath”调用该方法,而其他地方则出错。
我开始认为这可能是Apple的一面。我仔细检查了我的tableview方法,看起来很好。
截图:
应该如何: http://i49.tinypic.com/i77nzd.jpg
向下滚动和备份后如何: http://i45.tinypic.com/311kgte.jpg
请注意,如果我向下滚动并备份几次,我也可以“触发”底部单元格的消失。
编辑(2007年7月19日):我收录了更多其他信息。而且,这是另一个更新:
该项目正在使用其他两个tableView,他们都没有遇到过这个问题。有问题的人和没有问题的人之间的主要区别是:
今天我尝试使用“数据源”(包含要显示的所有必需字符串的数组)用于错误的数据源,但问题在重新启动几次后再次发生,因此这不是罪魁祸首。我意识到这可能不是原因,但我只想尝试任何我想到的事情。
同样,非常感谢任何形式的帮助。