项数不确定的UITableViewCell

时间:2019-03-17 23:28:39

标签: swift uitableview cell uistackview

我需要用一些按钮制作一个单元格。此按钮是问题的答案选项。但是问题和按钮(答案)的数量不确定,因为我从Alamofire获得了这些数据。因此,可能有2、3、6或任意数量的按钮。 是否有一种方法可以根据(例如)数组中的项目数以编程的方式添加这些按钮,使其看起来受到约束?像堆栈视图一样?

预先感谢

2 个答案:

答案 0 :(得分:1)

堆栈视图无疑是将任意数量的视图约束到列(或行)中的一种方法。因此,这听起来是最好的方法。

答案 1 :(得分:1)

这是一种偷偷摸摸的方法,但是,如果您知道最大数量的按钮,则可以将其直接添加到情节提要上的自定义原型单元中,而无需添加按钮以编程方式。

解决方案(在Swift 4中编写,但有一个一般性的答案)

  1. 假设任何问题中最多有8个答案,请在自定义原型单元中创建8个按钮。根据需要添加约束,使它们看起来更漂亮!
  2. 记住要给您的单元格一个唯一的标识符(在我的情况下为“ CustomCell”)。
  3. 转到文件>新文件> Cocoa Touch类>选择“ TableViewCell”子类 并给它起一个适当的名称(在我的情况下为CustomCellTableViewCell.swift)。这将包含您所有的UI组件出口。
  4. 在情节提要中选择原型单元。导航到左侧的第三个图标,然后选择“ CustomCellTableViewCell”作为您的课程。
  5. 按住Control键并拖动要使用的按钮和字段,从情节提要到新创建的CustomCellTableViewCell.swift。该文件现在应如下所示:
class CustomCellTableViewCell: UITableViewCell {
    @IBOutlet weak var question: UILabel!
    @IBOutlet weak var answerOne: UIButton!
    @IBOutlet weak var answerTwo: UIButton!
    ...
    ...
    @IBOutlet weak var answerEight: UIButton!

}
  1. 接下来的几个步骤将在TableviewDataSource函数func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell中。记住将TableviewCell强制转换为CustomCell:
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell") as! CustomCellTableViewCell
  1. 将所有答案按钮放在一个数组中
var answerButtons = [cell.answerButtonOne, cell.answerButtonTwo..., cell.answerButtonEight]
  1. 现在,您可以按如下所示循环设置答案按钮文本:
for i in 0..<answerButtons.count {
  if i < data[indexPath.row].answers.count { // if the answer exists, add it to the button
    cell.answerButton[i].isHidden = false // show button if answer exists 
    cell.answerButton[i].setTitle(data[indexPath.row], for: .normal)
  } else {
    cell.answerButton[i].isHidden = true // hide that button
  }
}