gpt4 book ai didi

ios - 无法将 indexpath.row 整数传递给第二个 View Controller

转载 作者:行者123 更新时间:2023-11-28 06:31:08 26 4
gpt4 key购买 nike

请看下面的转场代码。有两个 Controller 。第一个 Controller 是一个 TableView ,它有一个变量“activeRow”,它是一个整数,用于标识选定的 indexPath 行。然后通过 segue 将变量“activeRow”传递给第二个 View Controller ,该 View Controller 具有显示所选 indexPath 行的标签。没什么复杂的。当我运行代码时,无论索引路径如何,第二个 View Controller 上的标签始终显示“0”。 “0”是变量“activeRow”的初始值。但是,我在代码中插入的打印函数(见下文)显示“activeRow”的值根据 TableView 的选定 indexPath 行而变化。注意:当我运行模拟器时,控制台会打印两次“segue function:”。例如,如果 indexPath 值为 1,则将以下内容打印到控制台:“segue function: 0”和“segue function: 1”

在任何情况下,“activeRow”的值都不会通过 segue 传递。

但是,如果我从 secondViewController.labelTxt 中删除“activeRow”变量并简单地给它一个字符串值:secondViewController.labelTxt = "Test"然后字符串“Test”被传递到第二个 View Controller 并通过标签显示.

有什么想法吗?

示例代码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

activeRow = indexPath.row

print("This is the active row selected: \(indexPath.row)")

performSegue(withIdentifier:"sendToDetailView", sender: nil)
}


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

if segue.identifier == "sendToDetailView" {

let secondViewController = segue.destination as! DetailViewController

secondViewController.labelTxt = String(activeRow)

print("segue function: \(secondViewController.labelTxt)")

}

第二个 View Controller 代码

import UIKit

class DetailViewController: UIViewController {

var labelTxt = ""

//var activeRow = 0

@IBOutlet var testLable: UILabel!


override func viewDidLoad() {
super.viewDidLoad()

testLable.text = labelTxt

// Do any additional setup after loading the view.
}

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

最佳答案

indexPath 作为 segue 发送者传递,以便在 segue 准备中将其传递给 DetailViewController。当向 Controller 传递 indexPath 时,将执行 didSet block 。

socket 尚未在 prepare(for segue: 中加载,因此通过在 switch 语句中使用目标 View ,我们将自动解包值并加载 View 。

MasterViewController.swift

// MARK: UITableViewDelegate

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

performSegue(withIdentifier:"sendToDetailView", sender: indexPath)
}

// MARK: Navigation

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

switch (segue.destination.view, segue.destination, sender) {
case let (_, controller as DetailViewController, indexPath as NSIndexPath):
controller.indexPath = indexPath
break
default:
break
}
}

DetailViewController

// MARK: Outlets

@IBOutlet var testLabel: UILabel?

// MARK: Properties

var indexPath: NSIndexPath? {
didSet {
testLabel?.text = indexPath?.row.description
}
}

关于ios - 无法将 indexpath.row 整数传递给第二个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40325098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com