iPhone: Как добавить строки в просмотр таблицы после того, как просмотр таблицы уже загружен? - PullRequest
0 голосов
/ 07 июля 2011

Я реализовал функцию «Добавить в избранное» для своего приложения iPhone. Он отлично работает, за исключением добавления ячеек в мой любимый вид таблицы во время выполнения. Например, я дал следующие методы.

- (void)viewWillAppear:(BOOL)animated 
{
    [super viewWillAppear:animated];

    tableView.hidden = YES;
    warningLabel.hidden = YES;

    // Load any change in favourites
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *data = [defaults objectForKey:kFavouriteItemsKey];
    self.favourites = [NSKeyedUnarchiver unarchiveObjectWithData:data];

    if([self.favourites count] > 0) 
        tableView.hidden = NO;
    else 
        warningLabel.hidden = NO;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    return [self.favourites count]; // Favorites is a dictionary contains required data
}

- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = [NSString stringWithFormat:@"index: %d",indexPath.row];

    return cell;
}

Этот код работает нормально и корректно отображает строки только в первый раз! После загрузки таблицы и добавления нового элемента (ов) в избранное или удаления элемента (ов), это не имеет никакого значения для моего просмотра таблицы! Я хочу отобразить именно то, что доступно в избранном словаре. Кажется, CellForRowAtIndexPath не вызывается, когда ViewAppear снова. Есть ли какой-нибудь метод для TableView, который я могу использовать для достижения своих требований?

Ответы [ 2 ]

6 голосов
/ 07 июля 2011

Я думаю, что вы пропустили звонок [tableView reloadData];

0 голосов
/ 07 июля 2011

Очень простой способ - просто позвонить [tableView reloadData] всякий раз, когда вы вносите какие-либо изменения.

Существует также лучший (быстрее для больших столов и, возможно, анимированный; более элегантный), но гораздо более сложный путь, в который я не пойду, если вы не решите, что reloadData путь вам не подходит.

...