iPhone:如何在表视图已加载后在表视图中添加行?

时间:2011-07-07 12:45:55

标签: iphone objective-c ios uitableview runtime

我已经为我的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;
}

这段代码工作正常,只是第一次正确显示行!加载tableview后如果我在收藏夹中添加新项目或删除任何项目,它对我的​​tableview没有任何影响!我想准确显示收藏夹词典中可用的内容。似乎再次ViewAppear时不会调用CellForRowAtIndexPath。我可以使用TableView的任何方法来实现我的要求吗?

2 个答案:

答案 0 :(得分:6)

我认为您错过了致电[tableView reloadData];

答案 1 :(得分:0)

非常简单的方法是,只要您做出任何更改,只需致电[tableView reloadData]

还有一个更好的(大表更快,可能更动画;更优雅),但更复杂的方式,除非你认为reloadData方式对你来说不够,否则我不会进入