自定义单元格标签值不会更改

时间:2013-08-14 09:33:07

标签: ios objective-c cocoa-touch uitableview

我创建了一个包含UIButtonUILabel

的customCell

代码在这里:

ItemViewController.h:

@interface ItemViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>
{
    NSArray *arr;
    IBOutlet ItemCustomCell *itemCell;
}

@property(nonatomic,retain)IBOutlet UITableView *tblItem;

ItemViewController.m

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

        ItemCustomCell *cell = (ItemCustomCell *) [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

        if (cell == nil) {
            [[NSBundle mainBundle] loadNibNamed:@"ItemCustomCell" owner:self options:nil];
            cell = itemCell;
        }

        cell.btnPlus.tag=indexPath.row;
        [cell.btnPlus addTarget:self action:@selector(incrementValue:) forControlEvents:UIControlEventTouchUpInside];

        return cell;
    }

    -(void)incrementValue:(UIButton *)btnAdd
    {
        NSLog(@"btn%d",btnAdd.tag);
        NSIndexPath *indexPath=[NSIndexPath indexPathForRow:btnAdd.tag inSection:0];
        ItemCustomCell *cell = (ItemCustomCell*)[tblItem cellForRowAtIndexPath:indexPath];
        cell.lblCount.text=[NSString stringWithFormat:@"%d",[cell.lblCount.text intValue]+1];

    }

ItemCustomCell.h

@interface ItemCustomCell : UITableViewCell
{


}

@property(nonatomic,strong)IBOutlet UIButton *btnPlus;
@property(nonatomic,assign)IBOutlet UILabel *lblCount;

标签的默认值为1.当我点击按钮时,它会显示下一个值。

当我向上或向下滚动tableView标签值重置为1.我在这里做错了什么?

7 个答案:

答案 0 :(得分:3)

对于customCell,您需要在Xib中指定其重用标识符及其类名,并加载到您的单元格以供重用:

    cell = [[[NSBundle mainBundle] loadNibNamed:@"ItemCustomCell" owner:self options:nil] lastObject];

修改

最好使用IBOutlet并委托在CustomCell中实现操作,然后使用tag。

//ItemCustomCell.h
@class ItemCustomCell;
@protolcol ItemCustomCellDelegate
  -(void) clickPlusButtonInsideCell:(ItemCustomCell *)cell;
@end
@interface ItemCustomCell
@property(weak, nonatomic) id<ItemCustomCellDelegate> delegate;
//Hookup with your view in Xib
@property (weak, nonatomic) IBOutlet UILabel *label;
-(IBACtion)clickPlusBut:(id)sender;
@end
//ItemCustomCell.m
-(IBACtion)clickPlusBut:(id)sender{
 [self.delegate clickPlusButtonInsideCell:self];
}

使用

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

    ItemCustomCell *cell = (ItemCustomCell *) [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"ItemCustomCell" owner:self options:nil] lastObject];
    }
    cell.delegate = self;

    return cell;
}

-(void) clickPlusButtonInsideCell:(ItemCustomCell *)cell{
   cell.label.text = @"something";
}

答案 1 :(得分:2)

问题是您要从与按钮关联的功能设置标签的值。

当您滚动视图,让细胞消失并重新出现时,控制器会重建您的细胞。

因此,如果您没有保存标签的价值,那么每当您的单元格离开屏幕时,您就会丢失它。

添加内容(如数组)以保存每个标签的值。在增加显示的值的同时增加保存的值。

答案 2 :(得分:0)

例如,您需要将数据分别存储在整数数组中。当你显示单元格从数组中获取值时。

现在您的值存储在标签中,但刷新后会丢失该数据并重置为默认值。

因此,在您的cellForTableRow中,您将标签文本设置为数组中的值。在第二种方法中,您可以增加存储在数组中的值,然后重新加载数据(或像现在一样手动更改标签。)

答案 3 :(得分:0)

在使用来自笔尖的UITableViewCell时,您应该遵循以下方法。

if (cell == nil) {
     NSArray *topLevelArray =  [[NSBundle mainBundle] loadNibNamed:@"ItemCustomCell" owner:self options:nil];

        cell = [topLevelArray objectAtIndex:0];
    }

答案 4 :(得分:0)

您已经有了关于将单元格的状态存储在单元格之外的答案,因为它在被回收时会被重置。这些都是正确的。

如果选择的状态很重要 - 则将其存储在单元格所代表的对象中。这样,如果您基于此对象配置单元格,它将通过回收正确保留。

如果状态是暂时的,并且不需要存储在对象中,则需要将此状态存储在某处。关于使用NSArray存储此状态有几个答案。我个人更喜欢使用带有indexPath的NSDictionary作为密钥。由于NSIndexPath符合NSCopying,因此它可以用作NSDictionary的密钥。

答案 5 :(得分:0)

找到一个解决方案,在numberOfSectionInTableView中我必须根据tableview的状态应用一个条件并相应地更改标签值。我正在使用分页,所以这是解决方案。

如果其他人没有在tableview中使用分页,那么只需在发送JSON请求之前设置一个值,并根据numberOfSectionInTableView中的值应用条件,它就会起作用。

答案 6 :(得分:0)

您的代码正在显示下一个值,因为您在按钮点击时正在递增值。

cell.lblCount.text=[NSString stringWithFormat:@"%d", [cell.lblCount.text intValue]+1];

并且tableView标签值重置为1,因为每次都会创建新单元格。

您应该了解更多关于tableview的工作原理以及如何使用可重用单元格。看看这篇文章A Closer Look at Table View Cells