gpt4 book ai didi

swift - 将数据从 TableView 发送到 DetailView Swift

转载 作者:IT王子 更新时间:2023-10-29 05:12:59 25 4
gpt4 key购买 nike

到目前为止,我正在尝试做对我来说可能是最简单和更令人困惑的事情之一我想开发自己的 App ,为此我需要能够根据用户点击的行传递一些信息(这是 Swift 语言)

我们有一个 RootViewController(表格 View )和一个 DetailViewController(带有 1 个标签和 1 个图像) enter image description here

(我们的观点)

代码如下:

@IBOutlet weak var tableView: UITableView!


var vehicleData : [String] = ["Ferrari 458" , "Lamborghini Murcielago" , "Bugatti Veyron", "Mercedes Benz Biome"]

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

var nib = UINib(nibName: "TableViewCell", bundle: nil)

tableView.registerNib(nib, forCellReuseIdentifier: "cell")



}

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



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


let cell:TableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as TableViewCell

cell.lblCarName.text = vehicleData[indexPath.row]

cell.imgCar.image = UIImage(named: vehicleData[indexPath.row])

return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

performSegueWithIdentifier("DetailView", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

if(segue.identifier == "DetailView") {

var vc = segue.destinationViewController as DetailViewController

}

}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 100
}

自定义 TableViewCell 类(有一个带有单元格的 xib 文件)

class TableViewCell: UITableViewCell {


@IBOutlet weak var lblCarName: UILabel!

@IBOutlet weak var imgCar: UIImageView!

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

override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

// Configure the view for the selected state
}

class DetailViewController: UIViewController {



@IBOutlet weak var lblDetail: UILabel!

@IBOutlet weak var imgDetail: UIImageView!

override func viewDidLoad() {
super.viewDidLoad()
}

问题是:

如果用户点击 Ferrari 458 ,DetailViewController 中的 lblDetail 会显示:Ferrari 458 is a super car which is able to reach 325 km/h ......(我们想要什么) 并且 imgDetail 将能够显示汽车的图像(无论我们想要什么)

如果用户现在单击 Bugatti Veyron,lblDetail 会向我们显示:Bugatti Veyron 是一款完美的 super 运动机器。它是世界上最快的汽车之一....

imgDetail 给我们看这辆车的图片

所有汽车都一样,这取决于我们点击了哪一行

我知道工作是围绕第一个 View Controller 中的 prepareForSegue 函数进行的,但我尝试了很多不同的方法来实现它,并且一切都运行正常

我们如何做到这一点???

最佳答案

这是给你的例子:

var valueToPass:String!

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
println("You selected cell #\(indexPath.row)!")

// Get Cell Label
let indexPath = tableView.indexPathForSelectedRow!
let currentCell = tableView.cellForRowAtIndexPath(indexPath)! as UITableViewCell

valueToPass = currentCell.textLabel.text
performSegueWithIdentifier("yourSegueIdentifer", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){

if (segue.identifier == "yourSegueIdentifer") {
// initialize new view controller and cast it as your view controller
var viewController = segue.destinationViewController as AnotherViewController
// your new view controller should have property that will store passed value
viewController.passedValue = valueToPass
}
}

但不要忘记在 DetailViewController 中创建一个 passedValue 变量。

这只是将数据从一个 viewController 传递到另一个 viewController 的示例,您可以根据需要使用此示例传递数据。

有关更多信息,请参阅此链接。

Passing values between ViewControllers based on list selection in Swift

Use didSelectRowAtIndexPath or prepareForSegue method for UITableView?

Swift: Pass UITableViewCell label to new ViewController

https://teamtreehouse.com/forum/help-swift-segue-with-variables-is-not-working

也许这会对你有所帮助。

swift 3.0

var valueToPass:String!
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("You selected cell #\(indexPath.row)!")

// Get Cell Label
let indexPath = tableView.indexPathForSelectedRow!
let currentCell = tableView.cellForRow(at: indexPath)! as UITableViewCell

valueToPass = currentCell.textLabel?.text
performSegue(withIdentifier: "yourSegueIdentifer", sender: self)
}

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){

if (segue.identifier == "yourSegueIdentifer") {
// initialize new view controller and cast it as your view controller
var viewController = segue.destination as! AnotherViewController
// your new view controller should have property that will store passed value
viewController.passedValue = valueToPass
}
}

关于swift - 将数据从 TableView 发送到 DetailView Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28430663/

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