如何在表格视图中提供“实时”更新Xcode

时间:2017-05-31 14:39:27

标签: ios swift tableview

我创建了一个显示玩家(蜜蜂)及其属性的Tableview。您也可以升级玩家,但此升级不会实时显示。我必须在TableView上一直向下滚动,然后向上滚动以查看更新的值。有人知道修复吗?

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    var beeslevel: [Int] {
        return [beelevel, wasplevel, bumblebeelevel]
    }
    var beelevel = 0
    var wasplevel = 0
    var bumblebeelevel = 0
    let bees = ["bee", "wasp", "bumblebee"]

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

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

        cell.beeimage.image = UIImage(named: bees[indexPath.row] + ".png")
        cell.beelabel.text = bees[indexPath.row]
        cell.beelevel.text = "lvl \(beeslevel[indexPath.row])"

        return(cell)
    }

    @IBAction func beelevelup(_ sender: Any) {
        beelevelup()
    }

    func beelevelup() {
        beelevel += 1
        score -= 50
    }

1 个答案:

答案 0 :(得分:0)

如果我有正确的问题,你实际上想要一个包含玩家信息的TableView行,每当它升级时都要更新。

您需要通过编写以下代码来重新加载单元格:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    var players:[String]?
    var tableView: UITableView?

    override func viewDidLoad() {
        super.viewDidLoad()

        players = ["Ronaldo", "Ronaldinho", "Messi", "Suarez", "Neymar", "Pogba", "Pele", "Rooney", "Ozil"]

        tableView = UITableView()
        tableView?.frame = CGRect.init(x: 10, y: 20, width: 200, height: 500)
        tableView?.dataSource = self
        tableView?.delegate  = self
        tableView?.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        view.addSubview(tableView!)

        let button = UIButton.init(type: UIButtonType.system)
        button.setTitle("Update Data", for: UIControlState.normal)
        button.frame = CGRect.init(x: 10, y: tableView!.frame.origin.y + tableView!.frame.size.height+20, width: tableView!.frame.width, height: 50)
        button.addTarget(self, action: #selector(onRowUpdate), for: UIControlEvents.touchUpInside)
button.backgroundColor = UIColor.brown
        view.addSubview(button)

    }

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

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

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = players?[indexPath.row]
        return cell
    }

    func onRowUpdate() {
        let index = NSIndexPath.init(item: 2, section: 0)
        players?[index.row] = "Traxido"
        tableView!.reloadRows(at: [index as IndexPath], with: UITableViewRowAnimation.automatic)
    }

}