Swift 滚动后,我的计时器标签会显示一个新的数字

Swift 滚动后,我的计时器标签会显示一个新的数字,swift,uitableview,timer,tableview,countdowntimer,Swift,Uitableview,Timer,Tableview,Countdowntimer,我的计时器标签在滚动或重新编辑tableview后会占用一个新的数字,同时每秒显示几个数字。有人能帮我把我的标签展示出来吗 我希望我的标签只显示它第一次进入的号码 在您看到的图片中,在滚动或中继表之后,计时器显示多个值​​每秒钟每秒钟。 我把我的代码和图片 import Alamofire import Foundation class Games: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOu

我的计时器标签在滚动或重新编辑
tableview
后会占用一个新的数字,同时每秒显示几个数字。有人能帮我把我的标签展示出来吗

我希望我的标签只显示它第一次进入的号码

在您看到的图片中,在滚动或中继表之后,计时器显示多个值​​每秒钟每秒钟。 我把我的代码和图片

import Alamofire
import Foundation

class Games: UIViewController, UITableViewDataSource, UITableViewDelegate {
    @IBOutlet weak var gamesTableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        Alamofire.request("http://188.158.121.200:3030/shans.com/get_main_room_list", method:.post, headers: headers).responseJSON { (newresponse) in
            do {
                let decoder = JSONDecoder()
                let response = try decoder.decode(Root1.self, from: newresponse.data!)
                switch(response.joinedUser) {
                case  .joinedUserElementArray( let arr):
                    AppDelegate.AllofGames_Ids = arr.map { $0.id }
                case .string( _) :
                    break
                }
                if AppDelegate.AllofGames.isEmpty == true {
                    for each in response.allRooms {
                        let epocTime = TimeInterval(Int(each.matchTime)!) / 1000
                        if each.finished == true || AppDelegate.AllofGames_Ids.contains(each.id)  {
                            //Do nothing
                        }else {
                            let structGames = StructAllofGames(finished: each.finished, pic: each.pic, _id: each.id, coininput: each.coinInput, Award_money: each.awardMoney, Award_coin: each.awardCoin, Match_time: Int(epocTime), Winner_number: each.winnerNumber, Free: each.capacity.free, Total: each.capacity.total)
                            AppDelegate.AllofGames.append(structGames)
                            DispatchQueue.main.async{
                                self.gamesTableView.reloadData()
                            }//dispatch
                        }//else
                    }
                } else {
                    print("fk")
                }
            }
        }
    }

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

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

        Cell.SekeVorudi.text = String(AppDelegate.AllofGames[indexPath.row].coininput)
        Cell.jaize.text =  String(AppDelegate.AllofGames[indexPath.row].Award_money) + "تومان"
        Cell.ZarfiatOtagh.text = String(AppDelegate.AllofGames[indexPath.row].Total) + "/" + String(AppDelegate.AllofGames[indexPath.row].Free)
        Cell.TedadBarande.text = String(AppDelegate.AllofGames[indexPath.row].Winner_number)
        let  Fulllink    = AppDelegate.AllofGames[indexPath.row].pic
        Cell.imageview.downloaded(from: Fulllink)
        let (h,m,s)  = secondsToHoursMinutesSeconds(seconds: AppDelegate.AllofGames[indexPath.row].Match_time)
        let HoursToMinute = h * 60
        let AllOfMinutes = HoursToMinute + m
        Cell.timer(m: AllOfMinutes, s: 0)
        return Cell
    }

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

}
以及tableview单元格中的我的代码:

class MyCustomCell: UITableViewCell {
    @IBOutlet weak var timelabel: UILabel!
    @IBOutlet weak var SekeVorudi: UILabel!
    @IBOutlet weak var jaize: UILabel!
    @IBOutlet weak var TedadBarande: UILabel!
    @IBOutlet weak var ZarfiatOtagh: UILabel!
    @IBOutlet weak var imageview: UIImageView!

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        // Configure the view for the selected state
    }

    func timer(m: Int, s: Int) {
        DispatchQueue.global(qos: .userInteractive).async {
            var hour : Int = m/60
            var minute : Int = m % 60
            var second : Int = s

            DispatchQueue.main.async {
                self.timelabel.text = (String(format: "%02d:%02d:%02d", hour, minute, second))
            }

            while true {
                sleep(1)
                if hour == 0 && minute == 0 && second == 0 {
                    DispatchQueue.main.async {
                        UIView.animate(withDuration: 1, animations: {
                            self.timelabel.alpha = 0
                        })
                    }
                } else if second == 0 {
                    if minute != 0 {
                        minute = minute - 1
                        second = 59
                    } else if second == 0 && minute == 0 {
                        hour = hour - 1
                        minute = 59
                        second = 59
                    }
                } else if second != 0 {
                    second = second - 1
                }
                DispatchQueue.main.async {
                    self.timelabel.text = (String(format: "%02d:%02d:%02d", hour, minute, second))
                }
            }
        }
    }
}  

UIViewController
顶部设置一个可选变量,并将其值设置为所需的单元格编号,然后在
CellForRowAt
中检查该值是否为
nil
,如果未将标签设置为该编号,如果其
nil
保持正常运行

此问题主要是由于当滚动单元格时,将单元格从
UITableView
中排队,因此调用
CellForRowAt
以重置默认数据,在您的情况下,再次重置
UILabel


在您的情况下,我建议将计时器设置在该功能/单元之外,这样您就可以正常使用该值而无需重置

欢迎来到SO,你必须首先理解问题,而不仅仅是在这里询问代码,通常社区不喜欢被询问代码,我建议你理解问题,这样以后就不会再发生这种情况,尽管你可以问我你不理解的部分