以下是我删除的代码,它工作正常,但您必须打开另一个选项卡,然后再次单击此选项卡以删除该项目。由于这不是普通的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];
}
}
感谢所有愿意提供帮助的人
答案 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]”。