将数据从TableView发送到DetailView Swift

Fac*_*ose 19 tableview detailview swift

我试图为我做一个最简单和最令人困惑的事情,直到现在我想开发自己的应用程序,为了做到这一点,我需要能够传递一些信息,具体取决于用户点击哪一行(它是Swift lenguage)

我们有一个RootViewController(表视图)和一个DetailViewController(带有1个标签和1个图像) 在此输入图像描述

(我们的观点)

这是代码:

@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
}
Run Code Online (Sandbox Code Playgroud)

自定义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()
    }
Run Code Online (Sandbox Code Playgroud)

问题是:

如果用户单击法拉利458,DetailViewController中的lblDetail将显示:法拉利458是一辆超级跑车,能够达到325公里/小时......(无论我们想要什么),imgDetail将能够显示图像(无论如何)我们想要的)汽车

如果用户现在点击Bugatti Veyron,那么lblDetail会向我们展示:Bugatti Veyron是一款完美的超级运动机器.它是世界上最快的汽车之一......

imgDetail向我们展示了这款车的形象

所有汽车的相同之处在于我们点击了哪一行

我知道这个工作是围绕prepareForSegue func在第一个View Controller中进行的,但是我尝试了很多不同的方法来使它成为可能而且运行正常

我们怎么能这样做?

Dha*_*esh 40

以下是您的示例:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

但是别忘了passedValue在你的中创建一个变量DetailViewController.

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

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

基于Swift中的列表选择在ViewControllers之间传递值

对UITableView使用didSelectRowAtIndexPath或prepareForSegue方法?

Swift:将UITableViewCell标签传递给新的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
    }
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

51365 次

最近记录:

7 年,2 月 前