Удалить строки из UITableView - PullRequest
1 голос
/ 27 марта 2011

Вот код для моего удаления, он работает нормально, но вам нужно открыть другую вкладку, а затем снова щелкнуть эту вкладку, чтобы удалить элемент.Поскольку это не обычный 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 ]

7 голосов
/ 27 марта 2011

Ну, вам либо нужно вызвать reloadData или - deleteRowsAtIndexPaths: withRowAnimation: .

4 голосов
/ 27 марта 2011

Вы, кажется, не вызываете метод UITableView reloadData в любой момент после того, как вы удалили.

Таким образом, добавление ...

[tableView reloadData];

... в нижней части вашего - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath метода должен решить проблему.

3 голосов
/ 27 марта 2011

У меня есть две мысли по этому поводу:

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]», которые не нужны для обновления табличного представления.

...