第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將數(shù)據(jù)從TableView發(fā)送到DetailView Swift

將數(shù)據(jù)從TableView發(fā)送到DetailView Swift

PIPIONE 2019-12-03 09:45:14
直到現(xiàn)在我想開(kāi)發(fā)自己的App之前,我都試圖為我做一件最簡(jiǎn)單,更令人困惑的事情,為了做到這一點(diǎn),我需要能夠根據(jù)行用戶(hù)點(diǎn)擊的方式傳遞一些信息(這是Swift語(yǔ)言)我們有一個(gè)RootViewController(表視圖)和DetailViewController(帶有1個(gè)標(biāo)簽和1個(gè)圖像) 在此處輸入圖片說(shuō)明(我們的觀點(diǎn))這是代碼:@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類(lèi)(具有帶有單元格的xib文件)class TableViewCell: UITableViewCell {@IBOutlet weak var lblCarName: UILabel!問(wèn)題是:如果用戶(hù)單擊Ferrari 458,則DetailViewController中的lblDetail將顯示:Ferrari 458是一輛超級(jí)跑車(chē),能夠達(dá)到325 km / h……(無(wú)論我們想要什么),imgDetail可以顯示圖像(無(wú)論如何)我們想要的)如果用戶(hù)單擊布加迪威龍,則lblDetail向我們顯示:布加迪威龍是一款完美的超級(jí)運(yùn)動(dòng)機(jī)。它是世界上最快的汽車(chē)之一。imgDetail向我們展示這輛車(chē)的圖像所有汽車(chē)都一樣,這取決于我們點(diǎn)擊了哪一行我知道工作是圍繞第一個(gè)View Controller中的prepareForSegue函數(shù)進(jìn)行的,但是我正在嘗試許多不同的方法來(lái)使其成為可能,并且一切正常我們?nèi)绾巫龅竭@一點(diǎn)???
查看完整描述

3 回答

?
慕的地8271018

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]

        }

    }

}


查看完整回答
反對(duì) 回復(fù) 2019-12-03
?
莫回?zé)o

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。


查看完整回答
反對(duì) 回復(fù) 2019-12-03
  • 3 回答
  • 0 關(guān)注
  • 635 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)