UITableView设置tableview行隐藏

时间:2013-05-05 17:04:32

标签: ios objective-c uitableview

我在grouptableview中有一个自定义的tableview单元格。我有一个隐藏的。然后我必须让它可见。细胞标签是3。

这不符合我的代码:

if (self.tableView.tag == 3) {
                self.tableView.hidden = NO; //Not working.
            }

我需要让一行可见。我希望你明白。

4 个答案:

答案 0 :(得分:49)

SWIFT 中,您需要做两件事,

  1. 隐藏您的手机。 (因为可重用的单元格可能会发生冲突)

  2. 将单元格的高度设置为 ZERO

  3. 看这里,

    1. 隐藏你的细胞。

      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
          let myCell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cellID",for: indexPath) as! UITableViewCell
      
          if(indexPath.row < 2){
              myCell.isHidden = true
          }else{
              myCell.isHidden = false
          }
      
          return myCell
      }
      
    2. 将单元格的高度设置为 ZERO

      func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
          var rowHeight:CGFloat = 0.0
      
          if(indexPath.row < 2){
              rowHeight = 0.0
          }else{
              rowHeight = 55.0    //or whatever you like
          }
      
          return rowHeight
      } 
      
    3. 使用此功能可以消除可重复使用的单元冲突问题。

      你也可以为 cell?.tag 做同样的事情来隐藏特定的单元格。

答案 1 :(得分:46)

传递zero中特定单元格的单元格高度heightForRowAtIndexPath:,它会自动隐藏: -

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
 {
      float heightForRow = 40;

      YourCustomCell *cell =(YourCustomCell *)[tableView cellForRowAtIndexPath:indexPath];

      if(cell.tag==3)
          return 0;
      else 
          return heightForRow;
 }

将以下方法添加到您的代码中,它将起到作用。 希望它会对你有所帮助。

答案 2 :(得分:1)

请参阅此代码: -

 - (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
 {
  if(section == theSectionWithoutARow)
{
    if(shouldRemoveTheRow)
        return [theArrayWithTheSectionContents count] - 1;
    else
        return [theArrayWithTheSectionContents count];
  }
   // other sections, whatever
  }

    - (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:          (NSIndexPath *)indexPath
     {
       // blah blah standard table cell creation

    id theCellObject;

     if(indexPath.section == theSectionWithoutARow)
     {
    NSInteger theActualRowToDisplay = indexPath.row;
    if(shouldRemoveTheRow && indexPath.row >= theRowIndexToRemove)

    {
        theActualRowToDisplay = indexPath.row + 1;
    }
    theCellObject = [theArrayWithTheSectionContents objectAtIndex:theActualRowToDisplay];
}

// now set up the cell with theCellObject

return cell;
  }

希望这能帮到你

答案 3 :(得分:1)

Images[![ ][1] enter image description here

这是我的情况。首先,我的表格视图是静态的。并且在“帐户”部分中,应始终仅显示一个单元格。用户登录时显示LoggedInCell,而用户未登录时显示unLoggedInCell。 一种解决方案是将其高度设置为零,但是您可能会遇到NSContraints错误,该错误很复杂,需要修复。 我的解决方案如下:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let count = super.tableView(tableView, numberOfRowsInSection: section)
    if section == 0 {
        return count - 1
    }
    return count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if indexPath.section == 0 {
        if userForApp == nil {
            return super.tableView(tableView, cellForRowAt: IndexPath(row: 0, section: 0))
        } else {
            return super.tableView(tableView, cellForRowAt: IndexPath(row: 1, section: 0))
        }
    } else {
        return super.tableView(tableView, cellForRowAt: indexPath)
    }

}

非常简单!是? 顺便说一句,您可能像我一样遇到单元格高度问题,我的意思是两个单元格(UnLoggedInCell和LoggedInCell)具有不同的高度,我们应该通过执行以下操作来告知表视图对象单元格高度的值:

    var originHeightOfUnLoggedInCell: CGFloat = 0.0
    var originHeightOfLoggedInCell: CGFloat = 0.0

    func recordInitialHeightOfCells() { // called in viewDidLoad()
        self.originHeightOfUnLoggedInCell = self.unLoggedInCell.frame.height
        self.originHeightOfLoggedInCell = self.loggedInCell.frame.height
  }

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.section == 0 {
            if userForApp == nil {
                return originHeightOfUnLoggedInCell
            } else {
                return originHeightOfLoggedInCell
            }
        } else {
            return super.tableView(tableView, heightForRowAt: indexPath)
        }
    }