从 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()
祝你好运。
我正在尝试做与此主题上大多数人要求做的相反的事情。大多数人想要 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()
祝你好运。