我下面的代码使IOS滑动删除功能并删除该行。问题是底层数据结构没有被删除。我有3个单元格,Google-Bing-Yahoo,如果我删除Google,则删除单元格但Bing会向上移动,变为indexPath.row 0并继承Google过去的行为。我在哪里错过了“嘿删除对这个单元格的动作”的电话。或者也许这就是我分配细胞的方式?我应该使用标签吗?
////My Array
someData = [[NSMutableArray alloc]init];
[someData addObjectsFromArray:[NSMutableArray arrayWithObjects: @"Google", @"Bing", @"Yahoo", nil]];
////Allow cell editing & remove data
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove the row from data model
[someData removeObjectAtIndex:indexPath.row];
// Request table view to reload
[tableView reloadData];
}
////Cell Chosen Action
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if(indexPath.row == 0) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://google.com"]];
}
if(indexPath.row == 1) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://bing.com"]];
}
if(indexPath.row == 2) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://yahoo.com"]];
}
答案 0 :(得分:1)
你的didSelectRowAtIndexPath说无论如何,第0行打开google。当你删除谷歌时,第0行现在是bing,但你仍然打开谷歌。做类似的事情:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: [NSString stringWithFormat:@"http://%@.com", [someData objectAtIndex:indexPath.row]]]];
}
基本上你会用数组中的名字形成url,不需要任何if语句和混淆。