标签在刷新

时间:2016-02-18 12:59:33

标签: ios swift uilabel

我有一个显示状态的标签。我使用此函数更新状态,该函数从我的数据库中获取0到3之间的数字。

标签声明为弱:

@IBOutlet weak var dealProgressLabel: UILabel!

然后

func updateDealStatus(){

    dealProgressActivityIndicator.startAnimating()
    api.loadDealDetails(dealIdent!, completionHandler: { (status, error ) -> Void in

        if error != nil{

            print(error)
        }
        else{
            if let dealStatusProgr = status{

                print("deal status is now\(dealStatusProgr)")
                dispatch_async(dispatch_get_main_queue()){
                    self.setDealProgressStatusLabel(Int(dealStatusProgr)!)
                    self.dealProgressActivityIndicator.stopAnimating()
                    self.refreshControl?.endRefreshing()
                }
            }

        }
    })
}

然后我只使用一个开关来改变文本标签:

func setDealProgressStatusLabel(dealProgress: Int){


    switch dealProgress {

    case 0:

    dispatch_async(dispatch_get_main_queue()){

        self.dealProgressLabel.text =  "Waiting for Payment"
        self.dealProgressLabel.textColor = UIColor.redColor()
        self.navigationItem.rightBarButtonItem = self.paymentButton

        }



    case 1:

        dispatch_async(dispatch_get_main_queue()){

            self.dealProgressLabel.text = "Waiting to Redeem"
            self.dealProgressLabel.textColor = UIColor.darkGrayColor()
            //  self.navigationItem.rightBarButtonItem = self.disputeButton
            self.navigationItem.rightBarButtonItem = nil

        }



    case 2:
        dispatch_async(dispatch_get_main_queue()){

            self.dealProgressLabel.text = "Waiting for Review"
            self.dealProgressLabel.textColor = UIColor.darkGrayColor()
            self.navigationItem.rightBarButtonItem = self.addReviewButton

        }


    case 3:


        dispatch_async(dispatch_get_main_queue()){

            self.dealProgressLabel.text = "Completed"
            self.dealProgressLabel.textColor = UIColor.darkGrayColor()
            self.navigationItem.rightBarButtonItem = nil


        }



    default:


        self.dealProgressLabel.text = ""


    }

}

问题在于,如果我处理付款,标签会正确显示下一个状态“等待兑换”。 enter image description here

然而,当我使用:

刷新tableView时
func reloadModelWhenPull(sender:AnyObject){
    updateDealStatus()
}

“等待付款”和“等待兑换”两个文本相互叠加显示。

enter image description here

当我再次拉动时,“等待付款”消失了。

print("deal status is now\(dealStatusProgr)")

始终显示正确的状态编号,因此我不知道该怎么办。

最后,我在updateDealStatus

中致电viewWillAppear
override func viewWillAppear(animated: Bool) {
    updateDealStatus()
}

********* UPDATE ******* ********

我保持清爽,我发现问题大约在前60/90秒左右发生。之后它总是只显示正确的文字? 有什么想法吗?

********* UPDATE2 ******* ********

如果我在拉动刷新之前等待大约10秒钟,则问题不会发生。如果我可以立即开始刷新,那么就会无关紧要地发生

2 个答案:

答案 0 :(得分:1)

func setDealProgressStatusLabel(dealProgress: Int){

            self.dealProgressLabel.text = "" //Empty as method starts
            ...
}

它会设置""在分配新值之前。

答案 1 :(得分:0)

我刚改变了这个并且它有效:

 let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
                dispatch_async(dispatch_get_global_queue(priority, 0)) {
                    // moved my switch here
                    self.setDealProgressStatusLabel(Int(dealStatusProgr)!)
                    dispatch_async(dispatch_get_main_queue()){
                        print(dealStatusProgr)
                        self.dealProgressActivityIndicator.stopAnimating()
                        self.refreshControl?.endRefreshing()
                    }

                }

this指出了正确的方向。