从主VC中的Method调用UITableViewCell方法?

时间:2015-08-24 04:29:06

标签: ios uitableview delegates protocols custom-cell

我正试图做与此话题大多数人要求做的相反的事情。大多数人想要一个表视图单元格中的按钮来调用VC / VC表中的方法。我已经有了一个协议。

问题/疑问

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

所需功能的示例

我的最终目标是按下主VC中的按钮将更改单元格内按钮的标题。一个简单的例子就是我有一个带有单个表的视图,按下按钮按下两个数组,汽车和摩托车之间的表内容切换。当桌子显示汽车时,单元格按钮标题应该全部显示为“Look inside”,但是当显示摩托车按钮时,它应显示为“仔细观察”。

代码

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

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),并且协议已添加到我的自定义单元类声明中。但是,如何在自定义单元格类中执行最后一个缺失的部分,我将类分配给委托?

1 个答案:

答案 0 :(得分:0)

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

自定义单元格由customCellviewController定义。所有自定义单元格按钮和标签都将其IBOutlet连接到customCellviewController。我无法弄清楚如何在表格外(在mainViewController中)进行操作/更改会立即导致单元格标签和按钮发生变化。

注意:协议往往以其他方式工作(单元格操作会触发mainVC中的函数)。我无法弄清楚如何使用协议来解决这个问题。幸运的是,解决方案比协议简单得多。

解决方案!

我编写了“updateCell”方法,该方法将更改标签和按钮,并且该代码现在位于customCellviewController中。然后我简单地通过将调用添加到我的cellForRowAtIndexPath函数中来调用/触发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
}

现在上面的代码/方法在构建表时运行。因此,要更新单元格,请按一下按钮或其他操作重新加载表格数据:

tableView.reloadData()
祝你好运。