从 tableView 更改 DetailVC 中的标签
Changing Labels in DetailVC from tableView
我正在尝试更改 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
}
import UIKit
class DetailViewController: UIViewController {
var passedValue : String!
@IBOutlet weak var lblDetail: UILabel!
@IBOutlet weak var imgDetail: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
据我所知,您做得很好,您的代码中唯一缺少的部分是将 passedValue 设置为 DetailViewController 中的标签,因此只需在 viewDidLoad 方法中添加以下内容
override func viewDidLoad() {
super.viewDidLoad()
lblDetail.text = passedValue
}
已编辑:
要将描述传递给 DetaliViewContorller,您必须首先以某种方式存储它,最好的方法是声明一个包含名称和描述的结构
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...]
最后传递的值必须这样初始化
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
valueToPass = vehicleData[indexPath.row].vehicleDescription
performSegueWithIdentifier("DetailView", sender: self)
}
其简单的执行以下步骤:
- 在详细信息视图控制器中添加一个包含详细信息文本的数组。
- 当用户单击该行时,您需要获取 index.row 并将其传递给您的详细信息视图控制器。
- 使用索引路径从您的第 1 步数组中检索数据。
- 将它添加到您的标签中。
- 并且必须在 ViewDidLoad 方法中设置 Lable.text。
我正在尝试更改 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
}
import UIKit
class DetailViewController: UIViewController {
var passedValue : String!
@IBOutlet weak var lblDetail: UILabel!
@IBOutlet weak var imgDetail: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
据我所知,您做得很好,您的代码中唯一缺少的部分是将 passedValue 设置为 DetailViewController 中的标签,因此只需在 viewDidLoad 方法中添加以下内容
override func viewDidLoad() {
super.viewDidLoad()
lblDetail.text = passedValue
}
已编辑:
要将描述传递给 DetaliViewContorller,您必须首先以某种方式存储它,最好的方法是声明一个包含名称和描述的结构
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...]
最后传递的值必须这样初始化
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
valueToPass = vehicleData[indexPath.row].vehicleDescription
performSegueWithIdentifier("DetailView", sender: self)
}
其简单的执行以下步骤:
- 在详细信息视图控制器中添加一个包含详细信息文本的数组。
- 当用户单击该行时,您需要获取 index.row 并将其传递给您的详细信息视图控制器。
- 使用索引路径从您的第 1 步数组中检索数据。
- 将它添加到您的标签中。
- 并且必须在 ViewDidLoad 方法中设置 Lable.text。