TableView单元格操作



我有一个viewController,其中包含来自SON文件的数据列表。此页面运行完美。在此页面上,有很多酒吧的价格。我想创建另一个场景(secondviewController)。每次,当我从列表中推出一家酒吧时,我想在另一个场景上显示有关该地方的更多信息。运行,但是当我选择一家酒吧时,程序显示了从列表中的第一个酒吧的信息,当我选择另一个酒吧时,他显示了以前选择的先前的酒吧。抱歉,我的英语很糟糕。请帮助我:D

这是我的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
}

}

这是我的第二视图Controller:

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)
}
}

,而不是让全局变量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

最新更新