如何从不同的Viewcontroller访问tableview自定义单元格

时间:2017-04-13 09:51:03

标签: ios swift xcode uitableview uiviewcontroller

我有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()
    }
}

1 个答案:

答案 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) {
  }

}