如何使用Swift 3正确实现静态单元格

时间:2017-01-15 07:35:26

标签: swift uitableview swift3 tableviewcell

我实际上找不到一个教程,告诉我如何构建一个使用静态单元格的应用程序;可点击的单元格。根据几个过时的发布和对象c答案,我把一些东西放在一起。我的问题是,当我点击一个单元格时,我得到staticDemoTableCell没有成员present

我在UIViewController中嵌入了一个表控制器。对于那个单元格(目前只有一个),我创建了一个类:

class staticDemoTableCell: UITableViewCell, UITableViewDelegate {
  @IBOutlet weak var tableView: UITableView! 

  override func awakeFromNib() {
    [...]
    tableView.delegate = self
  }

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("clicked") // Works when the cell is clicked
    // self.present() do not work. I need to present another viewcontroller when this cell is clicked
  }

}

有些东西不合适,每个单元格都是一个类?

我真的需要知道我是否采取了正确的方式来做这件事。我真正想要的更多是这样的。你见过ie:分组交易星期一:列表,星期二:列表等。每个单元格都可以点击,就像iOS设备的设置一样。任何指示都将非常感激。

3 个答案:

答案 0 :(得分:9)

所以你可以做到以下几点。设置表格视图,然后将单元格设置为静态,一旦完成,您需要确保知道将要有多少部分。这取决于您的设计或您想要实现的目标。

然后你可以这样做:

如果您有多个部分,并且部分1有多个单元格。第2节只有一个单元格。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    switch indexPath.section {
    case 1:
        switch indexPath.row {
        case 0:
            // Do something
        case 1:
            // Do something 
        default:
            break
        }
    case 2:
        // Do something
    default:
        break
    }
}

如果您只有一个包含两个单元格的部分,则可以执行以下操作:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    switch indexPath.row {
    case 0:
        // Do something
    case 1:
        // Do something
    default:
        break
    }
}

我希望这有助于解决您的问题。祝你好运

答案 1 :(得分:8)

如果表格视图包含静态单元格,则会更容易:

  • 在Interface Builder中,选择表格视图并将TO date设置为Content
  • 在控制器类中创建Static CellsIBOutlet并连接它们。
  • 不需要实现表视图数据源方法和子类化单元格。

答案 2 :(得分:0)

对于不同部分中的行,您可以通过示例对3个部分进行以下操作。第1节有1行,第2节有6行,第3节有3行:

override func numberOfSections(in tableView: UITableView) -> Int {
    return 3
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch section {
    case 0:
        return 1
    case 1:
        return 6
    case 2:
        return 3
    default:
        return 0
    }
    
}