滚动tableview计数标签值是否已更改?

时间:2016-12-09 09:51:59

标签: ios objective-c uitableview

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

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

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PickAClassCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
cell.CountLabel.tag=1000;
return cell;
} 
-(void)PlusButtonSelect :(UIButton *)sender
{
    UILabel *label1 = (UILabel *)[sender.superview viewWithTag:1000];
int count = [label1.text intValue];

        count = count + 1;

        label1.text = [NSString stringWithFormat:@"%d",count];

        NSLog(@"%@",label1);
}

当我点击PlusButtonSelect计数时,这是我的代码会增加。问题是当我的tableview滚动时,countlabel变为零。

7 个答案:

答案 0 :(得分:2)

最后我找到答案,这里myData是NsMutableArray。首先基于No of Row,我们可以在myData中获取第一个Zero。  在cellForRowAtIndexPath

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

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

      if (cell == nil)
       {
         NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PickAClassCell" owner:self options:nil];
         cell = [nib objectAtIndex:0];

        }

        cell.CountLabel.text=[NSString stringWithFormat:@"%@",[myData objectAtIndex:indexPath.row]];

        cell.CountLabel.tag=1000;
        [cell.PlusCount addTarget:self action:@selector(PlusButtonSelect :)forControlEvents:UIControlEventTouchUpInside];
        return cell;
}

-(void)PlusButtonSelect :(UIButton *)sender
{

  UILabel *label1 = (UILabel *)[sender.superview viewWithTag:1000];
    NSLog(@"%@",label1);
   int count = [label1.text intValue];
    count = count + 1;
   NSString *Strcount= [NSString stringWithFormat:@"%d",count];
  [myData replaceObjectAtIndex:sender.tag withObject:Strcount];
  [tableview reloadData];

}

同样在Minusbutton中。

答案 1 :(得分:1)

在您的情况下,数据和可重用单元格不会绑定在一起。

您需要为每个位置的所有计数创建一个模型(可能是cellForRowAtIndexPath)。

创建if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PickAClassCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; } cell.CountLabel.tag=1000; cell.CountLabel.text = [myData objectAtIndex:indexPath.row]; 时,需要添加上述数组中的标签值。

示例代码如下所示:

[{
  "_id": "56fc22f625311b661becefb5",
  “activities”: [...],
  "lastName": “patrick”,
  "firstName": "John”,
  "city": “Chennai”,
  "state": “TAMILNADU”
}, {
  "_id": "56fc22f625311b661becefb6",
  “activities”: [...],
  "lastName": “sparrow”,
  "firstName": "John",
  "city": “Chennai”,
  "state": “TAMILNADU”
}]

答案 2 :(得分:0)

试试这个

  -(void)PlusButtonSelect :(UIButton *)sender
           PickAClassCell *cell = (PickAClassCell *)sender.superview.; // change with your customcell class.
           int count = [cell. CountLabel.text intValue];
          count = count + 1;
    label1.text = [NSString stringWithFormat:@"%d",count];

        }

答案 3 :(得分:0)

这是因为当您滚动tableview时,deque单元格可以重新使用以获得更好的性能!我的意思是tableview重新使用你的单元格,所以你的标签得到默认值或你设置的前一个。

因此,您需要在每次返回cellForRowAtIndexPath之前在cell中设置标签的值。

你可以通过数组来管理它!从PlusButtonSelect方法获取一个数组并在其中添加对象,并在label方法的cellForRowAtIndexPath上显示它的值!

答案 4 :(得分:0)

问题是由于当您滚动tableview时,由于dequeueReusableCellWithIdentifier而重新使用单元格以获得更好的性能。因此,您需要通过获取数组来管理之前或默认单元格值。

答案 5 :(得分:0)

这是我的演示。

#import "ViewController.h"

@interface CountModel : NSObject
/** label count */
@property (nonatomic, assign) NSInteger count;
@end

@implementation CountModel
@end

@interface ViewController () <UITableViewDelegate,UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
/** save model */
@property (nonatomic, strong) NSMutableArray *modelArrM;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    _modelArrM = [NSMutableArray array];
    for (NSInteger i = 0; i < 5; i++) {
        [_modelArrM addObject:[CountModel new]];
    }
    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
}

#pragma mark - TableView dataSource
#pragma mark -TableView --section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
#pragma mark -TableView --row
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _modelArrM.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    CountModel *model = _modelArrM[indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat:@"%ld",model.count];
    cell.textLabel.userInteractionEnabled = YES;
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
    [cell.textLabel addGestureRecognizer:tap];
    return cell;
}
- (void)tap:(UITapGestureRecognizer *)tap
{
    UILabel *label = (UILabel *)tap.view;
    UITableViewCell *cell = (UITableViewCell *)label.superview;
    NSIndexPath *indexPath = [_tableView indexPathForCell:(UITableViewCell *)cell.superview];
    CountModel *model = _modelArrM[indexPath.row];
    model.count +=1;
    [_tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}
@end

demo

答案 6 :(得分:-1)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
NSString *simpleTableIdentifier = [NSString stringWithFormat:@"PickAClassCell%@",indexPath];

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

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PickAClassCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
cell.CountLabel.tag=1000;
return cell;
} 
-(void)PlusButtonSelect :(UIButton *)sender
{
    UILabel *label1 = (UILabel *)[sender.superview viewWithTag:1000];
int count = [label1.text intValue];

        count = count + 1;

        label1.text = [NSString stringWithFormat:@"%d",count];

        NSLog(@"%@",label1);
}

您需要更改单元格标识符