展开并折叠静态表视图

时间:2012-03-21 11:36:43

标签: iphone uitableview static datasource

我的应用程序中有一个静态表视图。此表视图用于首选项。 表视图中的一个部分只有一个包含UISwitch的单元格。当这个开关被激活时,我想显示下面的部分,当它不是时,我想隐藏下面的部分。所有部分(也应该隐藏/显示的部分)都是使用Interface Builder设置的。

当表视图是静态的时,有没有办法隐藏或显示此部分,因为静态表视图没有数据源?如果它更容易,我也同意使用相同的部分,但在开关打开或关闭时添加/隐藏此部分的行。

修改

我已经接近了如何做到这一点。

将节中单元格的高度和页脚的页眉高度设置为0,我可以几乎隐藏该节。我仍然在上面的部分和下面的部分之间有一些间距,我无法弄清楚如何摆脱。 有没有人知道这个额外的间距来自哪里?见下面的照片。

这是我用来几乎隐藏该部分的代码。

/* Will display cell */
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 2)
        cell.hidden = YES;
    else
        cell.hidden = NO;
}

/* Height of cell */
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 2)
        return 0;

    return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}

/* Height of section header */
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 2)
        return 0;

    return [super tableView:tableView heightForHeaderInSection:section];
}

/* Height of section footer */
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (section == 2)
        return 0;

    return [super tableView:tableView heightForFooterInSection:section];
}

这是表视图现在的样子。我还需要隐藏一些空间。额外的空间位于标有“Arbejde”和“Anden”的部分之间。

Extra space

4 个答案:

答案 0 :(得分:1)

我使用问题中的代码工作了。只需将高度设置为1.0f而不是0。似乎高度仅在其值大于零时才有效。

Reducing the space between sections of the UITableView.

答案 1 :(得分:0)

请参阅本教程,这可能对您有所帮助www.cocoanetics.com/2011/03/expandingcollapsing-tableview-sections/

答案 2 :(得分:0)

对于静态细胞我也找不到合适的答案。如果你想删除部分或扩展单元格,那么这就是我使用的代码。

在.m

中创建BOOL值
@interface yourClassName (){


BOOL ddMenuButtonPressed;

}

@end

ddMenu表示drop down menu

接下来,我在viewDidLoad方法中将bool值设置为false。

ddMenuButtonPressed = false;

然后我初始化ddButton(在故事板控件中+从你的按钮拖动或切换到.h文件并创建动作并将名称设置为ddMenuButton)并在我的.m文件中使用此方法。

- (IBAction)ddMenuShow:(UIButton *)sender
{
     if (sender.tag == 0) {    
        sender.tag = 1;
        ddMenuButtonPressed = true;

    } else {
        sender.tag = 0;
        ddMenuButtonPressed = false;

    }
    //very important that you include these
    //they update the view like a viewDidLoad statement without leaving the screen
    //if you have any data entry points in your cell like a textfield it **will not** erase that data fortunately
    [self.tableView beginUpdates];
    [self.tableView endUpdates];

}

最后我们添加以下方法:

// Handle expanding and minimising cell or section

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //if the section is 0 (and there is only one cell) and ddMenuButtonPressed hasn't been pressed
    if (indexPath.section == 0 && ddMenuButtonPressed == false){

    //return the height you have it set as in story board (or a number)
    return [super tableView:tableView heightForRowAtIndexPath:indexPath];

    }
    //if the section is 0 and the ddMenuButton has been pressed
    if (indexPath.section == 0 && ddMenuButtonPressed == true){
    //change the cell height to 380 or whatever size you want
    return 380;
    }
    //otherwise leave cells as they are
    else {

    return [super tableView:tableView heightForRowAtIndexPath:indexPath];

    }
}

就是这样。没有花哨的编码,漂亮和干净(减去评论)和简单,你可以一遍又一遍地使用这个,你喜欢的部分。

答案 3 :(得分:0)

对于静态单元格,我只使用它:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  let cell = self.tableView(self.tableView, cellForRowAt: indexPath)
  if cell.isHidden {
    return 0
  } else {
    return cell.bounds.size.height
  }
}