- (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变为零。
答案 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
答案 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);
}
您需要更改单元格标识符