我有Viewcontroller C ,其中包含自定义tableView单元格,单元格背景颜色为蓝色。当我从Viewcontroller G 中单击logout Button时,我希望Viewcontroller C tableView单元格背景颜色应更改为红色。
如何在Viewcontroller中访问Viewcontroller C 单元 G ?
protocol ChangeCellColor {
func change()
}
import UIKit
class ViewControllerG : UIViewController {
var delegate : ChangeCellColor?
@IBAction func logout_click(_ sender: Any) {
delegate?.change()
}
}
import UIKit
class ViewControllerC : UIViewController {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell.contentView.backgroundColor = .red
}
}
extension ViewControllerC : ChangeCellColor {
func change() {
cellColor = UIColor(red: 0.74, green: 0.74 , blue: 0.75 , alpha: 1.0 )
tableView.reloadData()
}
}
答案 0 :(得分:1)
你可以使用Protocol&代表们实现了你的目标。请按照以下步骤操作: PS:这是未经测试的版本---
编辑:既然你告诉这些viewControllers之间有5个VC,那么检查我编辑的答案......
protocol ChangeCellColor {
func change()
}
class ViewControllerG : UIViewController {
var delegate : ChangeCellColor?
@IBAction func btnActionLogout(_ sender: Any) {
delegate?.change()
}
}
class ViewControllerC : UIViewController {
var cellColor : UIColor = .blue
@IBOutlet var tableView : UITableView!
override func viewDidLoad() {
super.viewDidLoad()
let vcG = ViewControllerG() // Or instantiate with SB
vcG.delegate = self // Now maintain this object and eventually at the time of need you have to push the above object in the stack...
}
}
extension ViewControllerC : ChangeCellColor {
func change() {
cellColor = .red
tableView.reloadData()
}
}
extension ViewControllerC : UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "") as? LocationCell else {return UITableViewCell() }
cell.contentView.backgroundColor = cellColor
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
}