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 次 |
| 最近记录: |