2017-09-01 85 views
0

我有一個ViewController,帶有一個子文件中的數據列表。這個頁面運行完美。在這個頁面上有許多酒吧的價格。我想製作另一個場景(SecondViewController)。每次當我從列表中推一家酒吧時,我想在另一個場景上展示更多關於那個地方的信息。運行,但是當我選擇一家酒吧時,節目會顯示列表中第一家酒吧的信息,而當我選擇另一家時,他會顯示之前選擇的酒吧。對不起,我的英語非常糟糕。請大家幫幫我:dTableView Cell actions

這裏是我的ViewController:

import UIKit 

var nev: [String] = [] 
var cim: [String] = [] 
var ar: [String] = [] 


class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

var myIndex: Int? 

@IBOutlet weak var tableView: UITableView! 


override func viewDidLoad() { 
    super.viewDidLoad() 

    let url = Bundle.main.url(forResource: "pubok", withExtension: "json") 
    do { 
     let allContactsData = try Data(contentsOf: url!) 
     let allContacts = try JSONSerialization.jsonObject(with: allContactsData, options: JSONSerialization.ReadingOptions.allowFragments) as! [String : AnyObject] 
     if let arrJSON = allContacts["Pubok"] { 
      for index in 0...arrJSON.count-1 { 

       let aObject = arrJSON[index] as! [String : AnyObject] 

       nev.append(aObject["Hely neve"] as! String) 
       cim.append(aObject["Cím"] as! String) 
       ar.append(aObject["Legolcsóbb sör"] as! String) 
      } 
     } 

     self.tableView.reloadData() 
    } 
    catch { 

    } 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return nev.count 
} 


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell 

    cell.nevLabel.text = nev[indexPath.row] 
    cell.arLabel.text = ar[indexPath.row] + "/0.5l" 
    return cell 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    myIndex = indexPath.row 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    let vc = segue.destination as! SecondViewController 

    vc.myIndex = myIndex 
} 

}

這裏是我的SecondViewController:

import UIKit 

class SecondViewController: UIViewController { 

myIndex: Int? 

@IBOutlet weak var secondnevLabel: UILabel! 
@IBOutlet weak var secondcimLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    secondnevLabel.text = nev[myIndex!] 
    secondcimLabel.text = cim[myIndex!] 


} 
} 

這是TableViewCell:

import UIKit 

class TableViewCell: UITableViewCell { 


@IBOutlet weak var nevLabel: UILabel! 
@IBOutlet weak var arLabel: UILabel! 




override func awakeFromNib() { 
    super.awakeFromNib() 

} 

override func setSelected(_ selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

} 
} 

回答

1

而不是hav在全局變量myIndex中,在第二個視圖控制器中有一個局部變量。在第一個視圖控制器中使用prepare(for segue:)將選定的行索引分配給該變量。


的ViewController:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 


    override func viewDidLoad() { 
    // etc 
    } 

    // Remove didSelectRowAt 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     let row = (self.tableView.indexPathForSelectedRow as NSIndexPath?)?.row 

     let vc = segue.destination as! SecondViewController 

     vc.myIndex = row 
    } 

SecondViewController:

class SecondViewController: UIViewController { 

    var myIndex: Int? 

    @IBOutlet weak var secondnevLabel: UILabel! 
    @IBOutlet weak var secondcimLabel: UILabel! 

    // etc 
+0

在視圖控制器通過vc.myIndex = myIndex我有一個錯誤:使用未解析的標識符的 'myIndex' –

+0

現在我有:致命錯誤:意外地發現零,同時展開一個可選值。我不明白什麼是錯的:( –

+0

在SecondViewController中:secondnevLabel.text = new [myIndex!]是錯誤 –