从UITableView删除行

时间:2011-03-27 17:44:55

标签: iphone objective-c uitableview viewwillappear

以下是我删除的代码,它工作正常,但您必须打开另一个选项卡,然后再次单击此选项卡以删除该项目。由于这不是普通的UITableView,你不能只从数组中删除然后更新表。所以有人可以帮我刷新视图。此外,下面的代码段不起作用:

// Reload the view completely
if ([self isViewLoaded]) {
    self.view=nil;
    [self viewDidLoad];
}

这是我的删除代码:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    // If row is deleted, remove it from the list.
    if (editingStyle == UITableViewCellEditingStyleDelete){
        // Delete song from list & disc \\

        //Remove from arrays
        [self.Writer removeObjectAtIndex:[indexPath row]];
        [self.Book removeObjectAtIndex:[indexPath row]];
        [self.BookImageId removeObjectAtIndex:[indexPath row]];

        NSString *TempWriter = [self.ArtistNamesArray componentsJoinedByString:@","];
        NSString *TempBook = [self.SongNamesArray componentsJoinedByString:@","];
        NSString *TempBookImageId = [self.YoutubeIDSArray componentsJoinedByString:@","];

        TempWriter = [TempWriter substringToIndex:[TempArtistNames length] - 1];
        TempBook = [TempBook substringToIndex:[TempSongNames length] - 1];
        TempBookImageId = [TempBookImageId substringToIndex:[TempYouTube length] - 1];


        //Save Details
        [[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%@,", TempBook] forKey:@"BookName"];
        [[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%@,", TempWriter] forKey:@"WriterName"];
        [[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%@,", TempBookImageId] forKey:@"ImageId"];
        [[NSUserDefaults standardUserDefaults] synchronize];

    }


}

我的ViewWillAppear代码是:

- (void) viewWillAppear: (BOOL) animated
{
    // Reload the view completely
    if ([self isViewLoaded]) {
        self.view=nil;
        [self viewDidLoad];
    }

}

感谢所有愿意提供帮助的人

3 个答案:

答案 0 :(得分:7)

答案 1 :(得分:4)

在您执行删除后,您似乎无法随时调用UITableView reloadData方法。

因此,添加......

[tableView reloadData];

... - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath方法的底部应该可以解决问题。

答案 2 :(得分:3)

我对此有两点想法:

1)您可以删除commitEditingStyle:...方法中的行。以下是Apple的“Locations”示例代码

中的示例
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];

在文档中搜索commitEditingStyle:您将找到其他示例。

2)看起来你已经为viewDidLoad添加了代码来配置表视图。删除该代码并将其放在单独的方法(如

)中是个好主意
- (void) updateMyTableView
{
     // Code to reload the table view.
}

然后在需要的地方调用它。直接调用viewDidLoad并不是一个好主意,因为它通常会执行其他更新表视图所需的“[super viewDidLoad]”。