gpt4 book ai didi

swift - 结合 didSelectRowAt 和 prepareForSegue?

转载 作者:行者123 更新时间:2023-11-28 11:57:21 25 4
gpt4 key购买 nike

我想区分通过 prepareForSegue 发送的内容。

例如;如果 tableView 中的顶部单元格 (indexPath.row == 0) 我想发送 firstVariable,如果 indexPath.row == 1 我想发送在 secondVariable 之上,依此类推。

我已经试过了,但没有成功:

   let starterInfoSegueIdentifier = "ToStarterInfoSegue"

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
if indexPath.row == 0
{
func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == starterInfoSegueIdentifier
{
let destination = segue.destination as! Starter2ViewController
let starterIndex = tableView.indexPathForSelectedRow?.row
destination.name = startersArray[starterIndex!]
destination.variable = firstVariable
}

}
}
}

编辑:
这是更新的代码:

class StartersViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

let startersArray = ["ArrayItem1", "ArrayItem2"]


var firstVariable = 1
var secondVariable = 10

@IBOutlet weak var tableView: UITableView!


override func viewDidLoad() {
super.viewDidLoad()

tableView.dataSource = self
tableView.delegate = self

}

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return startersArray.count
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 150
}

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "StartersCell") as! StartersTableViewCell

//Set round corners
cell.cellView.layer.cornerRadius = cell.layer.frame.height / 2

cell.startersLabel.text = startersArray[indexPath.row]

return cell
}



let starterInfoSegueIdentifier = "ToStarterInfoSegue"

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
self.performSegue(withIdentifier:starterInfoSegueIdentifier,sender:indexPath.row)
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == starterInfoSegueIdentifier
{
let destination = segue.destination as! Starter2ViewController
let index = sender as! Int
destination.name = startersArray[index]
destination.counter = index == 0 ? firstVariable : secondVariable

}

}

}

tableViewCell 的代码:

import UIKit

class StartersTableViewCell: UITableViewCell {

@IBOutlet weak var cellView: UIView!
@IBOutlet weak var startersLabel: UILabel!

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
}

最佳答案

准备必须是类范围

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
self.performSegue(withIdentifier:starterInfoSegueIdentifier,sender:indexPath.row)
}

//

func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == starterInfoSegueIdentifier
{
let destination = segue.destination as! Starter2ViewController
let index = sender as! Int
destination.name = startersArray[index]
destination.variable = index == 0 ? firstVariable : secondVariable

}

}

如果你有很多变量,那么我建议创建一个 struct 来包含你的模型,然后将它的对象添加到 startersArray 中,并从结构对象的属性中访问

struct MyContent {
var name:String
var otherVar:String
}

然后重构为这个

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
self.performSegue(withIdentifier:starterInfoSegueIdentifier,sender:startersArray[indexPath.row])
}

//

func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == starterInfoSegueIdentifier
{
let destination = segue.destination as! Starter2ViewController
let item = sender as! MyContent
destination.name = item.name
destination.variable = item.otherVar

}

}

关于swift - 结合 didSelectRowAt 和 prepareForSegue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50728395/

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