如何通过点击按钮删除 UITableview 中的多个选定项目? iOS Objective-C
How to remove multiple selected items in an UITableview by tapping a button ? iOS Objective-C
我在 UITableview 控制器上有一个 UITableview。到目前为止,我用数据加载了 table 视图,并将选定的值存储在一个名为 "selectedPsaData" 的数组中。
我想通过点击删除按钮从 tableview1 中删除多个选定的单元格。
以下代码适用于我的"didSelectRowAtIndexPath"。我想要一个合适的 Remove/Delete 函数 -
(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
}
你对选定的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];
}
希望对您有所帮助!
使用您当前的方法,即使您实现了 'remove' 逻辑(因为 table 视图缓存并重用单元格),您在滚动时也会得到奇怪的结果。
您应该先在 PSAData
class 中添加 BOOL selected
属性。那么你的选择方式可以变成:
- (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];
}
我在 UITableview 控制器上有一个 UITableview。到目前为止,我用数据加载了 table 视图,并将选定的值存储在一个名为 "selectedPsaData" 的数组中。
我想通过点击删除按钮从 tableview1 中删除多个选定的单元格。
以下代码适用于我的"didSelectRowAtIndexPath"。我想要一个合适的 Remove/Delete 函数 -
(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
}
你对选定的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];
}
希望对您有所帮助!
使用您当前的方法,即使您实现了 'remove' 逻辑(因为 table 视图缓存并重用单元格),您在滚动时也会得到奇怪的结果。
您应该先在 PSAData
class 中添加 BOOL selected
属性。那么你的选择方式可以变成:
- (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];
}