如何从静态单元格tableview中删除部分

时间:2011-12-15 09:57:48

标签: objective-c tableview storyboard

我正在尝试删除或隐藏tableview内部的静态单元格。我试图在函数viewDidLoad中隐藏它。这是代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.tableView beginUpdates];
    [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:YES];
    [self.tableView endUpdates];

    [self.tableView reloadData];
}

仍有部分出现。我正在使用故事板。能帮帮我吗?谢谢!

4 个答案:

答案 0 :(得分:6)

我发现通过覆盖numberOfRowsInSection隐藏部分最方便。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if ( section == 1 )
        // Hide this section
        return 0;
    else
        return [super tableView:self.tableView numberOfRowsInSection:section];
}

答案 1 :(得分:5)

检查此处找到的答案。 How to remove a static cell from UITableView using Storyboards使用静态单元格时似乎是一个问题的bug。希望这会有所帮助。

答案 2 :(得分:0)

你走了。这个也删除了垂直空间。

NSInteger sectionToRemove = 1;
CGFloat distance = 10.0f; // minimum is 2 since 1 is minimum for header/footer
BOOL removeCondition; // set in viewDidLoad

/**
 *  You cannot remove sections.
 *  However, you can set the number of rows in a section to 0,
 *  this is the closest you can get.
 */

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section {
  if (removeCondition && section == sectionToRemove)
    return 0;
  else
    return [super tableView:self.tableView numberOfRowsInSection:section];
}

/**
 *  In this case the headers and footers sum up to a longer
 *  vertical distance. We do not want that.
 *  Use this workaround to prevent this:
 */
- (CGFloat)tableView:(UITableView *)tableView
    heightForFooterInSection:(NSInteger)section {

  return removeCondition &&
                 (section == sectionToRemove - 1 || section == sectionToRemove)
             ? distance / 2
             : distance;
}

- (CGFloat)tableView:(UITableView *)tableView
    heightForHeaderInSection:(NSInteger)section {

  return removeCondition &&
                 (section == sectionToRemove || section == sectionToRemove + 1)
             ? distance / 2
             : distance;
}

答案 3 :(得分:-2)

似乎reloadData使表视图重新读取dataSource。您还应该在调用reloadData之前从dataSource中删除数据。如果您正在使用数组,请在调用removeObject:之前使用reloadData删除所需的对象。