1

これが私の削除のコードです。正常に機能しますが、アイテムを削除するには、別のタブを開いてからこのタブをもう一度クリックする必要があります。これは通常の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];
    }

}

助けてくれるすべての人に感謝します

4

3 に答える 3

7

そうですね、reloadDataを呼び出すか、– deleteRowsAtIndexPaths:withRowAnimation:を呼び出す必要があります。

于 2011-03-27T17:47:29.390 に答える
4

削除を実行した後は、 UITableView メソッドを呼び出していないように見えます。reloadData

そのため、追加...

[tableView reloadData];

...- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPathメソッドの最後に問題を解決する必要があります。

于 2011-03-27T17:46:57.327 に答える
3

私はこれについて2つの考えを持っています:

1)commitEditingStyle:...メソッドで行を削除できます。これはAppleの「Locations」サンプルコードの例です

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];

ドキュメントでcommitEditingStyle:を検索すると、他の例が見つかります。

2)テーブルビューを構成するためのコードをviewDidLoadに追加したようです。そのコードを削除して、次のような別のメソッドに配置することをお勧めします。

- (void) updateMyTableView
{
     // Code to reload the table view.
}

そして、必要な場所でそれを呼び出します。viewDidLoadを直接呼び出すことは、通常、テーブルビューを更新するために必要とされない「[superviewDidLoad]」などの他のことを行うため、あまり良い考えではありません。

于 2011-03-27T18:30:00.580 に答える