3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
這可能是另一種解決方案,在didSelectRowAtIndexPath方法中沒(méi)有太多代碼。請(qǐng)注意,雖然它看起來(lái)更干凈,并且我們不需要額外的變量valueToPass,但這可能不是最佳實(shí)踐,因?yàn)閜erformSegue方法中的sender參數(shù)應(yīng)該是發(fā)起segue(或nil)的實(shí)際對(duì)象。
// 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貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果將Segue從原型單元(在Interface Builder中)拖到下一個(gè)View Controller并將其Segue標(biāo)識(shí)符設(shè)置為“ Your Segue Identifier”,則也可以使用以下快捷方式進(jìn)行操作:
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(),也沒(méi)有這個(gè)表視圖方法。
在PushedViewController.swift(下一個(gè)視圖控制器)中:
var valueToPass: String!
override func viewDidLoad() {
super.viewDidLoad()
yourLabel.text = valueToPass
}
從情節(jié)提要板初始化標(biāo)簽后,設(shè)置標(biāo)簽的值很重要。這意味著您不能prepareForSegue()直接在先前的View Controller中設(shè)置標(biāo)簽,因此需要通過(guò)進(jìn)行傳遞valueToPass。
- 3 回答
- 0 關(guān)注
- 635 瀏覽
添加回答
舉報(bào)