【问题标题】:How to pass data from TableViewCell class of a View Controller to another ViewController via segue Swift 4?如何通过 segue Swift 4 将数据从 View Controller 的 UITableViewCell 类传递到另一个 ViewController?
【发布时间】:2018-02-04 10:54:19
【问题描述】:

我有 ViewController1ViewController2.ViewController1 有一个 TableView 和一个 TableViewCell 类来更新其 UI。

我想要做的是,当用户在TableViewTableView 中点击TableViewCell 内的button ViewController1,然后将转到ViewController2 并传递数据。

这是我尝试过的:

在 TableViewCell 类中

protocol MyDelegate : class {
    func showSecondVc(postId : Int)
}

class MyTableCell : UITableViewCell {

    weak var delegate : RefreshDelegate?

    @IBAction func myButtonTapped(_ sender: Any) {
        self.delegate?.showSecondVc(postId: posts.postId)
    }
}

在 ViewController1 中:

class ViewController1: UIViewController ,UITableViewDataSource, UITableViewDelegate , MyDelegate {

  func showSecondVc(postId: Int) {
      print("button tapped : \(postId)")
      self.performSegue(withIdentifier: "showSecondVc", sender: self)
  }

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      if segue.identifier == "showSecondVc" {
        //here I want to pass the **postId** to ViewController2
    }
  }

}

到目前为止,当在任何tableCell 中单击按钮时,我可以在ViewController1 中获得postId

现在的问题是postIdshowSecondVc() 内部,当我执行segue 时如何将postId 传递给ViewController2

【问题讨论】:

    标签: ios uitableview delegates swift4


    【解决方案1】:

    存储postId,以便您可以在prepare(for:sender:) 中拥有它,然后尝试从segue.destination 获取ViewController2

    private var postId: Int = 0
    
    func showSecondVc(postId: Int) {
        print("button tapped : \(postId)")
        self.postId = postId
        self.performSegue(withIdentifier: "showSecondVc", sender: self)
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showSecondVc",
            let secondVC = segue.destination as? ViewController2 {
            secondVC.postId = self.postId
        }
    }
    

    【讨论】:

    • @ken 你能告诉我为什么你比我更喜欢 Sh_Khan 的回答吗?
    • 因为他的回答将postId 包含在发件人中..我个人认为更好..只是我的个人意见
    • @ken 够公平
    • @ken 当然,没问题 :)
    【解决方案2】:

    在 ViewController2 中声明一个 var 并将其命名为 postID

    func showSecondVc(postId: Int) { 
      self.performSegue(withIdentifier: "showSecondVc", sender: postId)
    }
    

    并在准备中设置它

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      if segue.identifier == "showSecondVc",
         let secondVC = segue.destination as? ViewController2 {
         secondVC.postID = sender as! Int
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多