2017-09-01 20 views
0

私はsonControllerを持っています。このページは完全に実行されます。このページには多くのパブがあります。私は別のシーン(SecondViewController)を作りたいと思っています。そして、毎回、パブをリストからプッシュすると、別のシーンにその場所に関する詳細な情報を表示したいのです。それは実行されますが、私がパブを選択すると、プログラムはリストの最初のパブに関する情報を表示し、別のパブを選択すると前のパブを表示します。と申し訳ありません私の英語は非常に悪いです。私を助けてください:ここではDTableViewセルのアクション

は私の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には、2番目のビューコントローラにローカル変数があります。最初のビューコントローラで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:vc.myIndex = myIndexによってビューコントローラで

class SecondViewController: UIViewController { 

    var myIndex: Int? 

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

    // etc 
+0

私がエラーを有する:未解決識別子の使用を 'myIndex' –

+0

私は致命的なエラーが発生しました:オプションの値をアンラッピングしている間に予期せずnilが見つかりました。そして、私は何が間違っているのか分かりません:( –

+0

SecondViewController:secondnevLabel.text = new [myIndex!]はエラーです –

関連する問題