我在UITableview控制器上有一个UITableview。我用数据加载了表视图,并将所选值存储在一个名为“selectedPsaData”的数组中。
我想通过点击删除按钮从tableview1中删除多个选定的单元格。
以下代码适用于我的“didSelectRowAtIndexPath”。我想要一个适当的删除/删除功能 -
(IBAction)removeBtntapped:(id)sender{
}
请帮助我,因为我对Objective-C比较陌生。
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *psaData =[self.loadedPSAData objectAtIndex:indexPath.row];
PSATableViewCell *cell=[tableView1 cellForRowAtIndexPath:indexPath];
[self.tableView1 deselectRowAtIndexPath:indexPath animated:YES];
// [self.tableView2 deselectRowAtIndexPath:indexPath animated:YES];
if([self isRowSelectedOnTableView:tableView1 atIndexPath:indexPath])
{
[self.selectedCells removeObject:indexPath];
[self.selectedPSAData removeObject:psaData];
cell.accessoryType =UITableViewCellAccessoryNone;
}
else{
[self.selectedCells addObject:indexPath];
[self.selectedPSAData addObject:psaData];
cell.accessoryType =UITableViewCellAccessoryCheckmark;
[self.tableView1 performSelector:@selector(reloadData) withObject:nil afterDelay:0.2];
}
NSLog(@"%@", self.selectedPSAData); //selected values are holding in this Array
}
答案 0 :(得分:0)
您正在对所选PSA数据进行参考,这是非常好的。因此,在您的删除功能中,您应该只从原始PSA数据阵列中删除选定的PSA数据,然后重新加载tableView
。
您的功能应如下所示:
- (IBAction)removeBtntapped:(UIButton*)button {
// Lets create a tmp container with the original data
NSMutableArray *updatedLoadedPSAData = [[NSMutableArray alloc] initWithArray:self.loadedPSAData];
// Lets iterate through the selected PSA data
for (id selectedPSA in self.selectedPSAData) {
// Remove the selected item from the tmp container
[updatedLoadedPSAData removeObject:selectedPSA];
}
// Assign the tmp container to the original PSA data
self.loadedPSAData = updatedLoadedPSAData;
// Reload the tableView
[self.tableView1 reloadData];
}
希望这有帮助!
答案 1 :(得分:0)
使用您当前的方法,即使您获得了“删除”逻辑,您也会在滚动时获得奇怪的结果(因为表视图缓存并重用单元格)。
您应首先向BOOL selected
课程添加PSAData
属性。然后您的选择方法可以变为:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
PSAData *psaData = [self.loadedPSAData objectAtIndex:indexPath.row];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (psaData.selected) {
[self.selectedPSAData removeObject:psaData];
psaData.selected = NO;
} else {
[self.selectedPSAData addObject:psaData];
psaData.selected = YES;
}
[tableView reloadData];
}
要获取视觉指示器,只需在tableView:cellForRowAtIndexPath:
内添加几行。
PSAData *psaData = [self.loadedPSAData objectAtIndex:indexPath.row];
if (psaData.selected) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
最后,删除项目是匹配数组元素的一种情况。
- (void)removeSelected:(id)sender
{
for (id object in self.selectedPSAData) {
[self.loadedPSAData removeObject:object];
}
[self.selectedPSAData removeAllObjects];
[self.tableView reloadData];
}