滚动 UITableviewcells 时 IndexPath 值发生变化?
Posted
技术标签:
【中文标题】滚动 UITableviewcells 时 IndexPath 值发生变化?【英文标题】:IndexPath values are changing while scrolling UITableviewcells? 【发布时间】:2013-01-17 11:45:37 【问题描述】:在从 first view controller
移动到 second view controller
时,我将 indexpaths 保存在一个数组中,并在加载 first view controller
中的表时返回,如果当前 indexpath 在保存的 indexpaths 数组中,我必须创建一个自定义附件按钮。
但是,当滚动 UITableview
以及所需的单元格时,另一个单元格也会获得自定义按钮。当我在滚动时打印NSindexPaths
时,我得到的是随机值而不是正常值。
对于以上内容,我使用以下代码:
- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
// NSLog(@"newdata value is =%d",newData);
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UITableViewCell *cell = [self.positionsTable dequeueReusableCellWithIdentifier:@"playersInPosition"];
if (cell == nil)
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"playersInPosition"]autorelease];
UILabel *lblName = (UILabel *)[cell viewWithTag:100];
[lblName setText:[inputData objectAtIndex:[indexPath row]]];
UILabel *pname = (UILabel *)[cell viewWithTag:102];
[pname setText:[appDelegate.playersNFL objectAtIndex:[indexPath row]]];
for (NSIndexPath *object in appDelegate.indexPathList)
if ([object isEqual:indexPath])
NSLog(@"saved index path values are =%@",appDelegate.savedIndexPath);
UIButton *button = [self ChangeAccessoryButtonStyle:appDelegate.indexPathList[0]];
cell.accessoryView = button;
return cell;
【问题讨论】:
用NSString *CellIdentifier =[NSString stringWithFormat:@"%d",indexPath.row];
识别你的单元格
你在哪里保存 indexPaths ?你能解释更多你想要达到的目标吗?此外,由于单元重用,当isEqual
的if
评估为false 时,您应该有一个带有cell.accessoryView = nil
的else 分支。
嗨@Templar 我已将 indexPaths 保存在 - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 因为,我在第一个视图控制器中有附件详细信息披露按钮...谢谢回复
【参考方案1】:
我不记得文档中有任何部分说索引路径旨在被表视图重用,然后将对象与 designed function 进行比较可能是个好主意:
比较:
表示接收的深度优先遍历顺序 索引路径和另一个索引路径。
-(NSComparisonResult)比较:(NSIndexPath *)indexPath
参数
indexPath 要比较的索引路径。该值不能为零。如果 值为 nil,行为未定义。
返回值
深度优先 接收索引路径和indexPath的遍历排序。
NSOrderedAscending:接收索引路径在 indexPath 之前。 NSOrderedDescending:接收索引路径位于 indexPath 之后。 NSOrderedSame:接收索引路径和indexPath相同 索引路径。可用性
适用于 ios 2.0 及更高版本。
声明于
NSIndexPath.h
【讨论】:
嗨@A-Live 感谢您的回复...所有代码都工作正常。但是,uitableview 中单元格的 indexpath 值在滚动时会发生变化。我只是想知道在 cellForRowAtIndexPath 中声明单元格内容时我是否做错了什么......【参考方案2】:尝试删除此行并每次创建单元格。
UITableViewCell *cell = [self.positionsTable dequeueReusableCellWithIdentifier:@"playersInPosition"];
【讨论】:
以上是关于滚动 UITableviewcells 时 IndexPath 值发生变化?的主要内容,如果未能解决你的问题,请参考以下文章
UITextField 值在滚动时消失并重新出现在其他 UITableViewCells [重复]
Swift:如何防止未显示的 UITableViewCells 在滚动时被关闭
滚动 UITableView 时 iOS Expanded/Selected Custom UITableViewCells 状态变化