滚动 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 ?你能解释更多你想要达到的目标吗?此外,由于单元重用,当isEqualif 评估为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 状态变化

UITableViewCells 笔尖在我滚动时显示默认值

无法滚动包含 UITextFields 的 UITableViewCells

UITableViewCells 中的 UITextFields - 当单元格消失时,文本会消失