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 關注
- 629 瀏覽
添加回答
舉報