【发布时间】:2015-04-10 10:13:09
【问题描述】:
到目前为止,我正在尝试做一件对我来说最简单、最令人困惑的事情 我想开发自己的 App ,为了做到这一点,我需要能够根据用户点击的行(它是 Swift 语言)传递一些信息
我们有一个 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
}
自定义 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 将能够显示汽车的图像(无论我们想要什么)
如果用户现在点击布加迪威龙,lblDetail 将向我们展示:布加迪威龙是一款完美的超级运动机器。它是世界上最快的汽车之一......
imgDetail 向我们展示这辆车的图片
所有汽车都一样,具体取决于我们点击了哪一行
我知道工作是围绕第一个 View Controller 中的 prepareForSegue 函数进行的,但我尝试了很多不同的方法来使其成为可能,并且一切正常
我们怎样才能做到这一点???
【问题讨论】:
-
当我试图将一个字符串传递给另一个视图控制器以便将来按其名称存储它时,我也遇到了同样的问题。我偶然发现了这篇文章,它清楚地解释了它。 codingexplorer.com/segue-swift-view-controllers
标签: swift tableview detailview