3 回答
TA贡献1796条经验 获得超4个赞
这可能是另一种解决方案,在didSelectRowAtIndexPath方法中没有太多代码。请注意,虽然它看起来更干净,并且我们不需要额外的变量valueToPass,但这可能不是最佳实践,因为performSegue方法中的sender参数应该是发起segue(或nil)的实际对象。
// MARK: UITableViewDelegate methods
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
performSegue(withIdentifier: "goToSecondVC", sender: indexPath)
}
// MARK: UIViewController methods
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToSecondVC" {
if segue.destination.isKind(of: CarDetailsController.self) {
let secondVC = segue.destination as! CarDetailsController
let indexPath = sender as! IndexPath
secondVC.passedValue = carsArray[indexPath.row]
}
}
}
TA贡献1865条经验 获得超7个赞
如果将Segue从原型单元(在Interface Builder中)拖到下一个View Controller并将其Segue标识符设置为“ Your Segue Identifier”,则也可以使用以下快捷方式进行操作:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Your Segue Identifier" {
let cell = sender as! YourCustomCell
let vc = segue.destination as! PushedViewController
vc.valueToPass = cell.textLabel?.text // or custom label
}
}
而且你也不需要performSegueWithIdentifier()的didSelectRowAtIndexPath(),也没有这个表视图方法。
在PushedViewController.swift(下一个视图控制器)中:
var valueToPass: String!
override func viewDidLoad() {
super.viewDidLoad()
yourLabel.text = valueToPass
}
从情节提要板初始化标签后,设置标签的值很重要。这意味着您不能prepareForSegue()直接在先前的View Controller中设置标签,因此需要通过进行传递valueToPass。
- 3 回答
- 0 关注
- 573 浏览
添加回答
举报