菜鸟教程小白 发表于 2022-12-12 14:52:28

ios - 通过 Swift 中的 segue 将点击的单元格数据传递到另一个 View


                                            <p><p>我有一个 tableView,我正在尝试通过 segue 将与点击的单元格相关的数据发送到另一个 View 。
我的代码仅在第二次点击后才有效,并且在第一次点击时总是返回 nil。我想由于某种原因 prepareForSegue 首先被执行,这就是为什么 detailToSend 在第一次点击时总是为零,而第二次点击我从前一个点击的单元格中获取数据。我怎样才能解决这个问题 ?
<strong>更新:</strong></p>

<pre><code>var detailToSend = SingleRepository()

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if filteredResult.count &gt; 0 {
      detailToSend = filteredResult
    } else {
      detailToSend = finalArrayUnwrapped
    }
    performSegue(withIdentifier: &#34;showDetailSegue&#34;, sender: nil)
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == &#34;showDetailSegue&#34; {
      let vc = segue.destination as! DetailViewController
      vc.detail = detailToSend
    }
}
</code></pre>

<p>我的 DetailViewController</p>

<pre><code>class DetailViewController: UIViewController {


@IBOutlet weak var detailLabel: UILabel!

var detail: SingleRepository?

override func viewDidLoad() {
    super.viewDidLoad()

    if let detailUnwrapped = detail {
      print(detailUnwrapped)
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
</code></pre>

<p>}</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>确保您已经从 Storyboard 中的 ViewController 对象而不是单元格中创建了转场;如果您从单元格创建转场,则转场将在调用 <code>didSelectRowAt</code> 之前触发。 </p>

<p>正确设置segue后,可以使用<code>sender</code>参数来避免使用<code>detailToSend</code>属性:</p>

<pre><code>func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    var detailToSend: SingleRepository
    if filteredResult.count &gt; 0 {
      detailToSend = filteredResult
    } else {
      detailToSend = finalArrayUnwrapped
    }
    performSegue(withIdentifier: &#34;showDetailSegue&#34;, sender: detailToSend)
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? DetailViewController, let detailToSend = sender as? SingleRepository {            
      vc.detail = detailToSend
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 通过 Swift 中的 segue 将点击的单元格数据传递到另一个 View ,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/52025355/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/52025355/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 通过 Swift 中的 segue 将点击的单元格数据传递到另一个 View