我想创建一种视图,其中我有一个自定义单元格来显示项目列表和一个添加和删除项目的按钮(+/-)。
当我单击添加或删除按钮时,我希望它仅适用于一个单元格并增加单元格的值。
目前,它有效,但它会增加单元格中的所有内容,如何为每个独立单元格管理此内容?
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *cell =
(TableViewCell *)[_tableView dequeueReusableCellWithIdentifier:@"Cell"];
cell.addButton.tag = indexPath.row;
cell.removeButton.tag = indexPath.row;
cell.itemName.text = [models objectAtIndex:indexPath.row];
cell.itemPrice.text = [[stock objectAtIndex:indexPath.row] stringValue];
cell.count = [NSNumber numberWithInt:i];
cell.quantityLbl.text = [NSString stringWithFormat:@"%@", cell.count];
cell.quantityLbl.layer.cornerRadius = YES;
cell.quantityLbl.layer.borderWidth = 1.0;
return cell;
}
在添加按钮时: -
- (IBAction)addButton:(id)sender {
NSInteger num = [sender tag];
i = i + 1;
NSIndexPath *rowToReload = [NSIndexPath indexPathForRow:num inSection:0];
NSArray *rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[_tableView reloadRowsAtIndexPaths:rowsToReload
withRowAnimation:UITableViewRowAnimationNone];
}
答案 0 :(得分:4)
-(IBAction)addButton:(id)sender{
TableViewCell *cell;
// check device version
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")){
cell = (TableViewCell*)((UIButton*)sender).superview.superview.superview;
}
else{
cell = (TableViewCell*)((UIButton*)sender).superview.superview.superview.superview;
}
cell.lblNumber.text = [NSString stringWithFormat:@"%d",[cell.lblNumber.text intValue]+1];
}
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
答案 1 :(得分:1)
你需要创建另一个数组,称为" count"或其他东西,并将其初始化为与您的"模型相同的长度" array,最初有几个NSNumber对象,整数值为0。
然后,将添加按钮代码更改为:
- (IBAction)addButton:(id)sender {
NSInteger num = [sender tag];
int value = [count[num] integerValue];
value += 1;
count[num] = @(value);
NSIndexPath *rowToReload = [NSIndexPath indexPathForRow:num inSection:0];
NSArray *rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[_tableView reloadRowsAtIndexPaths:rowsToReload
withRowAnimation:UITableViewRowAnimationNone];
}
并确保您也更新了cellforrowatindexpath函数:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *cell =
(TableViewCell *)[_tableView dequeueReusableCellWithIdentifier:@"Cell"];
cell.addButton.tag = indexPath.row;
cell.removeButton.tag = indexPath.row;
cell.itemName.text = [models objectAtIndex:indexPath.row];
cell.itemPrice.text = [[stock objectAtIndex:indexPath.row] stringValue];
cell.count = count[indexPath.row];
cell.quantityLbl.text = [NSString stringWithFormat:@"%@", cell.count];
cell.quantityLbl.layer.cornerRadius = YES;
cell.quantityLbl.layer.borderWidth = 1.0;
return cell;
}
答案 2 :(得分:0)
如果您只更新1个单元格,请使用此选项: -
[NSArray arrayWithObject:rowToReload];
而不是: -
NSArray *rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
答案 3 :(得分:0)
试试这个
- (IBAction)addButton:(id)sender
{
NSInteger num = [sender tag];
i = i + 1;
UIButton * button = (UIButton*)sender;
CGPoint buttonPosition = [button convertPoint:CGPointZero toView: _tableView];
NSIndexPath *indexPathToReload = [_tableView indexPathForRowAtPoint:buttonPosition];
NSArray *rowsToReload = [NSArray arrayWithObjects:indexPathToReload, nil];
[_tableView reloadRowsAtIndexPaths:rowsToReload
withRowAnimation:UITableViewRowAnimationNone];
}