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

Posted

技术标签:

【中文标题】从另一个视图控制器单击 uitableviewcell 后,swift 3 更改 uitableviewcell?【英文标题】:swift 3 change uitableviewcell after click uitableviewcell from another view controller? 【发布时间】:2016-11-16 05:11:41 【问题描述】:

当用户单击 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。我将如何做到这一点?

提前感谢您的帮助和时间

【问题讨论】:

你添加的didSelectRowAt indexPath方法来自ViewController 2? @NiravD 是的 【参考方案1】:

也许您应该尝试使用协议。

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
    

要确保 delegate 不会是 nil:

override func prepare(for segue: UIStoryboardSegue, sender: Any?)

    let vc2 = segue.destination as! ViewController2
    vc2.delegate = self

或任何你选择 ViewController2 的地方。

也许这是实现您想要的最佳方式。

【讨论】:

以上是关于从另一个视图控制器单击 uitableviewcell 后,swift 3 更改 uitableviewcell?的主要内容,如果未能解决你的问题,请参考以下文章

快速从另一个视图控制器更改 webview 的 url

从另一个 modalviewcontroller 呈现 ModalViewcontroller

为啥我不能从另一个控制器中删除视图?

从另一个视图控制器中取消选择按钮

无法从另一个视图控制器更改 UILabel 的文本

从另一个视图控制器更新 UITableView 数据单元格