从 main VC 中的方法调用 UITableViewCell 方法?

Call UITableViewCell Method from Method in main VC?

我正在尝试做与此主题上大多数人要求做的相反的事情。大多数人想要 table 视图单元格中的按钮来调用 VC / VC table 中的方法。我已经有一个协议可以做到这一点。

问题/问题

我现在要添加的是相反的:我需要在我的主 ViewController 上按下一个按钮(其中包含我的 table)以调用我的 CusomTableViewCell [=40= 中的方法](注意:主 VC 上按下的按钮不在 table 中)。我创建了协议 class 并编写了函数,但我不知道如何将 CustomCellViewClass 设置为委托。当我做相反的事情时,我将“cell.delegate = self”插入到 cellForRowAtIndexPath 方法中。我还使用 prepareForSegue 来分配委托。但是没有 segue,现在 cell-creation-method,我迷路了!

所需函数示例

我的最终目标是按下主 VC 中的按钮将更改单元格中按钮的标题。一个简单的例子是,我有一个视图只有一个 table,在按钮上按下 table 内容在两个数组、汽车和摩托车之间切换。当 table 显示汽车时,单元格按钮标题应全部显示为“Look inside”,但显示摩托车按钮时应显示为“Look closer”。

代码

我已经编写了我希望单元格执行的函数:

func cellButton_Title_Switch (currentList: String) {
    if vcState == "cars" {
        cellButton.setTitle("Look inside", forState: UIControlState.Normal)
    }
    else {
        cellButton.setTitle("Look closer", forState: UIControlState.Normal)
    }
}

我创建了协议:

protocol delegateToChangeCellBut {
    func cellButton_Title_Switch (currentList: String)
}

我的 VC 按钮中有 self.delegate.cellButton_Title_Switch(currentList) 并且协议已添加到我的自定义单元格 class 声明中。但是我如何在自定义单元格 class 中完成最后遗漏的部分,我将 class 分配给委托人?

我最初的问题是我的 UITableView 的单元格有按钮和标签,其中一些会更改以匹配 table 之外的事物状态,这些事物由 mainViewController 处理。

自定义单元格由 customCellviewController 定义。所有自定义单元格按钮和标签都将其 IBOutlet 连接到 customCellviewController。我无法弄清楚如何在 table(在 mainViewController 中)之外制作一个 action/change 立即导致单元格标签和按钮发生变化。

注意:协议往往以相反的方式工作(单元操作触发 mainVC 中的函数)。我不知道如何使用协议来解决这个问题。幸运的是,解决方案比协议简单得多。

解决方法!

我编写了 "updateCell" 方法来更改标签和按钮,该代码现在位于 customCellviewController 中。然后,我只需将调用添加到我的 cellForRowAtIndexPath 函数中,即可 called/triggered 来自 mainViewController 的 "updateCell" 函数。所以它看起来像这样:

var stateOfPage = "Green"

//Creates the individual cells. If the above function returns 3, this runs 3 times
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    //Setup variables
    let cellIdentifier = "BasicCell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! customCell

    cell.updateCell(stateOfPage)

    return cell
}

现在上面的 code/method 在构建 table 时运行。所以要更新单元格,点击按钮或其他操作重新加载 table 数据:

tableView.reloadData()

祝你好运。