这是场景。我有一个带动态单元格的UITableViewController。每个单元格有3个按钮,用户可以单击。在应用程序的另一点,我需要用户看到另一个UITableViewController是不可编辑的,并且具有与用户在第一个UITableViewController中点击完成后看到的按钮相同的状态。
换句话说,它是一个历史页面。现在第一个UITableViewController有一个UITableViewControllerDataSource,我试过为第二个表视图控制器使用相同的数据源,但由于某种原因它不起作用。当用户在应用程序上向后导航以查看他们最初选择的第一个UITableViewController时,它会保存状态,但是当它们到达应用程序的末尾时,新的UITableViewController具有所有新的(未选定的)状态。那些按钮。
我还需要第二个UITableViewController具有不同的颜色和一些其他的小差异作为第一个,但是现在我最关心的是确保我可以从早期访问这些状态。
这是我的数据源:
class DepressedButtonTableViewControllerDataSource: NSObject, UITableViewDataSource, DepressedSelectionTableViewCellDelegate {
//MARK: Array for putting in my selections, and some other important variabls for managing choices
var choices: Array<Int> = []
var result = 0
var advanceArray: Array<Int> = []
// MARK: - Table view data source
func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 3
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "depressedSelection", for: indexPath) as! DepressedSelectionTableViewCell
let firstThing = "placeholder"
let secondThing = "other texxt"
let thirdThing = "multiple lines! look ma! look at this!"
let cellData = [firstThing, secondThing, thirdThing]
let text = cellData[indexPath.row]
cell.cellText.text = text
//configure muh buttons
cell.yes.setImage(#imageLiteral(resourceName: "yes_unselected"), for: .normal)
cell.yes.setImage(#imageLiteral(resourceName: "yes_selected"), for: .selected)
cell.no.setImage(#imageLiteral(resourceName: "no_unselected"), for: .normal)
cell.no.setImage(#imageLiteral(resourceName: "no_selected"), for: .selected)
cell.na.setImage(#imageLiteral(resourceName: "na_unselected"), for: .normal)
cell.na.setImage(#imageLiteral(resourceName: "na_selected"), for: .selected)
cell.delegate = self
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
//delegate code
func filledOut(controller: DepressedSelectionTableViewCell, selections: Int!, isClicked: Bool!) {
choices.append(selections)
if isClicked == true {
advanceArray.append(1)
}
if advanceArray.count == 3 {
print(choices.reduce(0, +))
result = (choices.reduce(0, +))
print(advanceArray.count)
NotificationCenter.default.post(name: Notification.Name("TableViewToDepressedParent"), object: nil)
}
}
}
答案 0 :(得分:1)
你有正确的总体想法。表视图是一个视图对象,它显示有关模型对象的信息并从用户收集输入。您希望将该输入保存回模型中。
对于非分段表视图,通常只需要一个结构数组作为数据模型。您可以将该数组传递给需要显示模型信息的任何视图控制器。您可以将该方法用于master-detail,其中用户点击单元格以获取有关该项目的详细信息(只需将所选单元格的索引传递给详细视图控制器。)
在您的情况下,您希望在2个位置显示阵列的所有内容,因此您可以将按钮状态保存到阵列中的条目中,然后在两个视图控制器中显示这些状态。
如果它不起作用,您需要编辑帖子以显示您的代码。显示数据模型。显示它是如何在视图控制器之间传递的。显示如何将模型中的信息安装到表视图中(通过发布表视图dataSource方法 - 尤其是cellForRow(at:)
。