Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 从tableView更改DetailVC中的标签_Swift_Label_Tableview_Detail - Fatal编程技术网

Swift 从tableView更改DetailVC中的标签

Swift 从tableView更改DetailVC中的标签,swift,label,tableview,detail,Swift,Label,Tableview,Detail,我正在尝试更改DetailViewController中的标签,具体取决于单击的行: 例如,如果我们单击法拉利,我想显示: “Wow , it's a beautiful red Ferrari of the year… blablabla..” 但如果您单击另一个: “I’m the label of the…. car” 基本上,每辆车都有一个描述 如何更改标签? 我的代码: class ViewController: UIViewController, UITableViewDele

我正在尝试更改DetailViewController中的标签,具体取决于单击的行:

例如,如果我们单击法拉利,我想显示:

“Wow , it's a beautiful red Ferrari of the year… blablabla..”
但如果您单击另一个:

“I’m the label of the…. car”
基本上,每辆车都有一个描述

如何更改标签? 我的代码:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!

var valueToPass : String!

//crear un color
let medOrange: UIColor = UIColor(red: 0.973, green: 0.388, blue: 0.173, alpha: 1)

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")

    //Propiedades de la tableView
    self.tableView.backgroundColor = medOrange
    self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None

}

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])

    cell.backgroundColor = medOrange

    return cell

}

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

    println("Has seleccionado la celda #\(indexPath.row)!")

    //Obtener la label de la celda
    let indexPath = tableView.indexPathForSelectedRow()

    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!

    valueToPass = currentCell.textLabel?.text

    performSegueWithIdentifier("DetailView", sender: self)

}

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

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

        var vc = segue.destinationViewController as DetailViewController

        vc.passedValue = valueToPass

    }  
}


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


从我看到的情况来看,您做得很好,代码中唯一缺少的部分是在DetailViewController中将passedValue设置为label,所以只需在viewDidLoad方法中添加以下内容

override func viewDidLoad() {
    super.viewDidLoad()

    lblDetail.text = passedValue

}
编辑:

要将描述传递给DetaliViewController,您必须首先以某种方式存储它,最好的方法是声明一个同时包含名称和描述的结构

struct Vehicle {

    var vehicleName : String
    var vehicleDescription : String
} 
然后,vehicleData数组应包含Vehicle类型的对象

var vehicleData : [Vehice] = [Vehicle(vehicleName : "Ferrari 458",vehicleDescription : "Ferrari desc" ), //Add all vehicles like this...]
最后passedValue必须像这样初始化

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

   valueToPass = vehicleData[indexPath.row].vehicleDescription

   performSegueWithIdentifier("DetailView", sender: self)

}

执行以下步骤很简单:

  • 在“详细信息”视图控制器中添加更多包含详细信息文本的数组
  • 当用户单击该行时,需要获取index.row并将其传递给详细信息视图控制器
  • 使用索引路径从1号步骤数组中检索数据
  • 把它加到你的标签上
  • 并且必须在ViewDidLoad方法中设置Lable.text

  • 谢谢你回答兄弟。您将如何使用您提到的描述来处理数组。所有说明均适用于每辆车。在数组中添加所有描述文本,如果任何汽车没有描述,则仍保留空白,并添加到数组的下一个中..一旦我编写了数组:如何首先将此数组与lblDetail关联?只需获取“单击汽车行”的index.row并将此值传递给detailsviewcontroller即可。在details视图中,您可以使用answer my friend的index path.row.Thx从新添加的描述数组中检索数据。这没关系,但如何加载lblDetail的内容??也许用描述为“陌生人”的数组说了怎么做??:Sit现在非常有意义,兄弟,我唯一不明白的事情是在哪里初始化它:valueToPass=vehicleData[indexPath.row]。vehicleddescription我必须详细说明吗?@FactorJose否必须在didselectrowatinexpath方法的第一个viewController中执行此操作(并清除所有其他内容)。同样在cellForRowAtIndexPath中,lblCarName文本应该通过获取vehicleName cell.lblCarName.text=vehicleData[indexPath.row].vehicleNameYou's boss@zellb它几乎完美运行我有一个错误:我运行模拟器,当我单击第一辆车时,标签为空,现在我返回,单击第二辆车:标签显示第一辆车的信息,再次返回,单击第三辆车,标签显示第二辆车的信息..:s
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    
       valueToPass = vehicleData[indexPath.row].vehicleDescription
    
       performSegueWithIdentifier("DetailView", sender: self)
    
    }