在一个UITableViewController中保存动态表视图单元格中的按钮状态,以便在另一个UITableViewController中查看

时间:2017-04-20 23:00:26

标签: ios swift uitableview tableviewcell

这是场景。我有一个带动态单元格的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)
    }

}

}

1 个答案:

答案 0 :(得分:1)

你有正确的总体想法。表视图是一个视图对象,它显示有关模型对象的信息并从用户收集输入。您希望将该输入保存回模型中。

对于非分段表视图,通常只需要一个结构数组作为数据模型。您可以将该数组传递给需要显示模型信息的任何视图控制器。您可以将该方法用于master-detail,其中用户点击单元格以获取有关该项目的详细信息(只需将所选单元格的索引传递给详细视图控制器。)

在您的情况下,您希望在2个位置显示阵列的所有内容,因此您可以将按钮状态保存到阵列中的条目中,然后在两个视图控制器中显示这些状态。

如果它不起作用,您需要编辑帖子以显示您的代码。显示数据模型。显示它是如何在视图控制器之间传递的。显示如何将模型中的信息安装到表视图中(通过发布表视图dataSource方法 - 尤其是cellForRow(at:)