ios - TableView 单元格操作

标签 ios swift uitableview uiviewcontroller

我有一个 ViewController,其中包含来自子文件的数据列表。该页面运行完美。此页面上有许多标有价格的酒吧。我想制作另一个场景(SecondViewController)。每次,当我从列表中推送一家酒吧时,我都想在另一个场景中显示有关该地点的更多信息。那次运行,但是当我选择一个酒吧时,程序会显示列表中第一个酒吧的信息,而当我选择另一个酒吧时,他会显示我之前选择的前一个酒吧。对不起,我的英语很糟糕。请帮助我:D

这是我的 View Controller :

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)

}
}

最佳答案

不是全局变量 myIndex,而是在第二个 View Controller 中有一个局部变量。在第一个 View Controller 中使用 prepare(for segue:) 将选定的行索引分配给该变量。


View Controller :

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
    }

第二 View Controller :

class SecondViewController: UIViewController {

    var myIndex: Int?

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

    // etc

关于ios - TableView 单元格操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46005122/

相关文章:

iOS 如何将字符串 Class 1 发送到 Class 2

ios - 为什么 UIControlState 是结构而不是枚举?

ios - 如何调整 UITableView 宽度以适应其内容?

ios - 从 tableviewcell 类加载或推送 viewcontroller

ios - iCloud 使用 UIDocument 保存数据崩溃

ios - 将当前正在运行的 SCNAction 应用于另一个 SCNNode

xcode - 如何从一个空项目开始创建一个 iPhone 应用程序,然后一次添加一个资源?

ios - 如何根据用户输入更新约束

ios - Swift 中具有两个不同 Segue 的一个原型(prototype)单元格

iphone - iOS 4 上的 UITableView 背景 View