如何避免选择具有相同indexPath

时间:2015-09-19 09:59:26

标签: objective-c uitableview cell

我几周来一直在努力解决这个问题,但仍未找到一个解决方案。没有人真的给我答案,也没有发现任何有助于我的问题的答案。

当更改单元格内容的颜色,位置等时,其他具有相同indexPath的单元格也会被修改。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object{
static NSString *simpleTableIdentifier = @"cell";

self.cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (self.cell == nil) {
    self.cell = [[SearchCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}

这就是我创建单元格的方式。帮助..!

修改

这是在每个单元格中实现的滑出视图。当您在单元格上向右滑动时,它会从左侧显示,但即​​使只修改了所选单元格的内容,也会出现其他几个单元格的滑出菜单。

这是我在自定义单元格类中实现滑出菜单的方法。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.optionView = [[OptionView alloc]initWithFrame:CGRectMake(0, 0, self.contentView.frame.size.width , self.contentView.frame.size.width)];
    self.optionView.delegate = self;
    [self.contentView addSubview: self.optionView];

OptionView'委托 - 向右滑动时调用

-(void)handleGesture:(UISwipeGestureRecognizer*)shouldOpenMenu{
POPSpringAnimation *anim = [POPSpringAnimation animation];
    anim.property = [POPAnimatableProperty propertyWithName:kPOPViewFrame];
    anim.toValue = [NSValue valueWithCGRect:CGRectMake(-self.frame.size.width/4, 0, self.optionView0.frame.size.width, self.optionView0.frame.size.height)];
    anim.springBounciness = 11;
    anim.springSpeed = 5;
    [self.optionView0.layer pop_addAnimation:anim forKey:@"spring0"];

1 个答案:

答案 0 :(得分:0)

首先,每个tableview单元格都有不同的索引路径。

第二,您永远不想在类级别属性中保存单元格。在本地创建它们并从cellForIndexPath:返回。您的表视图将处理其上的单元格。

第三,非常重要的是,细胞会被重复使用。因此,您应该在使用之前重置单元格。例如,如果在某些条件下将单元格颜色设置为红色,然后将表格向下移动,则会丢弃此单元格,并通过重新使用丢弃的单元格来呈现新单元格。如果您没有为该行设置单元格颜色,则需要重置单元格颜色以清除。

遵循这些规则,您应该能够解决问题。