从另一个视图控制器单击uitableviewcell后,swift 3更改uitableviewcell?

时间:2016-11-16 05:11:41

标签: tableview swift3 tableviewcell

当用户从viewcontroller 2中的tableview单元格中单击一个单元格时,我试图让viewcontroller 1中的tableview单元格更改。我知道我必须使用该函数

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
但是,我不确定如何实现我想要的目标。

这是我的代码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let indexPath = changeHotelTableView.indexPathForSelectedRow;
    let currentCell = changeHotelTableView.cellForRow(at: indexPath!) as! ChangeHotelTableViewCell

    var valueToPass = currentCell.textLabel?.text

}

我想将valueToPass变量放入另一个'视图控制器;说这个叫做timeViewController,带有timeTableView和timeTableViewCell。我该怎么做?

感谢您的帮助和提前时间

1 个答案:

答案 0 :(得分:0)

也许您应该尝试使用Protocol。

ViewController2:

protocol UserPressTheCell: NSObjectProtocol
{
   func didUserPressTheCellWith(indexPath: IndexPath, text: String)
}

class ViewController2: UIViewController
{
    //declare delegate
    weak var delegate: UserPressTheCell?
    ....
    func tableview(_ tableview: UITableView, didSelectRowAt indexPath: IndexPath) 
    {
        let indexPath = changeHotelTableView.indexPathForSelectedRow;
        let currentCell = changeHotelTableView.cellForRow(at: indexPath!) as! ChangeHotelTableViewCell

        self.delegate?.didUserPressTheCellWith(indexPath: indexPath, text: currentCell.textLabel?.text)
    }
}

然后在ViewController1中实现:

class ViewController1: UIViewController, UserPressTheCell
{
    @IBOutlet weak var tableview: UITableView!
    ...
    //MARK: UserPressTheCell
    func didUserPressTheCellWith(indexPath: IndexPath, text: String)
    {
        let cell = self.tableView.cellForRow(at: indexPath!) as! "Your VC1's cell"
        cell.textLabel?.text = text
    }
}

确保代表不会是nil:

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
    let vc2 = segue.destination as! ViewController2
    vc2.delegate = self
}

或任何你转向ViewController2的地方。

也许这是达到你想要的最佳方式。