我试图达到以下要求:
条件: 第一行是强制性的,只有 + 按钮其余的都是动态的
+ 和 - 按钮。
即我可以从任何行添加和删除任何行
例如假设我有 4 行,当我从第二行点击 + 按钮时,还会有一个
在第 4 行之后添加的行,假设我单击 - 需要删除第 3 行的按钮。
我的尝试:
第一次尝试
这是我的代码片段:
查看已加载
dataArray = [[NSMutableArray alloc] init];
for (int i = 0; i < 1; i++)
{
int value = i;
[dataArray addObject: [NSNumber numberWithInt:value]];
}
cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
[cell.serviceAdd addTarget:self action:@selector(onAddServiceButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[cell.serviceRemove addTarget:self action:@selector(onRemoveButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
cell.serviceAdd.tag = indexPath.row;
cell.serviceRemove.tag = indexPath.row;
}
-(void)onAddServiceButtonClicked:(UIButton*)sender
{
//NSLog(@"%ld", (long)sender.tag);
NSNumber *myNum = dataArray.lastObject;
NSNumber *bNumber = [NSNumber numberWithInt:[myNum intValue] + 1];
NSLog(@"%lu", (unsigned long)dataArray.count);
[dataArray addObject:bNumber];
NSLog(@"%lu", (unsigned long)dataArray.count);
[_serviceListTableview reloadData];
}
-(void)onRemoveButtonClicked:(UIButton*)sender
{
NSLog(@"%ld", (long)sender.tag);
NSInteger mySenderValue = sender.tag;
NSNumber *myNum = @(mySenderValue);
NSLog(@"%lu", (unsigned long)dataArray.count);
[dataArray removeObject:myNum];
NSLog(@"%lu", (unsigned long)dataArray.count);
[_serviceListTableview reloadData];
}
上面代码的问题:
我的 dataArray 具有(这些是通过单击 + 按钮的任意行添加的。列表将按顺序排列
仅订购)
(
0,
1、
2、
3、
4
)
在此之后,我点击了 - 按钮的第二行,即发件人标签为 1
现在数据数组
(
0,
2、
3、
4
)
现在我再次点击(价格 200)第二行,标签是 1
但该条目不会被删除,因为它不在数组中。
第二次尝试:
-(void)onAddServiceButtonClicked:(UIButton*)sender
在这种方法中,如果
NSNumber *myNum = dataArray.lastObject;
此行替换为 sender.tag (如在 onRemoveButtonClicked 中实现)
然后当我点击时,dataArray 中的条目是重复的 - 按钮 2 条目将被删除
任何建议都会对我有很大帮助。
最佳答案
我相信与其将按钮标签视为数组中的直接数据,不如将它们视为行索引,因为这就是它们的实际含义。因此,您不应使用 removeObject:
来更新数据模型,而应通过传递 removeObjectAtIndex:
值来使用 tag
。
关于ios - UITableView - 如何在 + 和 - 单击上更新数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32963570/