强制刷新UI以更快地更改按钮颜色和内容

时间:2015-09-11 23:34:30

标签: ios swift user-interface

我有以下代码从CloudKit获取数据,检查属性"已完成"如果是,则为false并向taskCount添加一个。

在迭代完任务后,它会更新按钮的内容和颜色。

问题是代码全部执行后,视图实际更新需要几秒钟,按钮上的数字以及要更改的颜色。

在更新按钮颜色和内容后,有没有办法可以强制刷新?

let taskManager = CloudKitTaskManager(database: CKContainer.defaultContainer().privateCloudDatabase)
    taskManager.getSummaryOfTasks {
        tasks in
        for index in 0...tasks.count-1 {
            if ("False" == tasks[index].completed){
                self.taskCount = self.taskCount + 1
            }
        }
        self.dueButton.setTitle(String(self.taskCount) + "\nOutstanding", forState: UIControlState.Normal)
        if (self.taskCount == 0) {
            self.dueButton.backgroundColor = UIColor(red:52/255, green:152/255, blue:219/255, alpha:1.0)
            self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        }else if(self.taskCount > 0 && self.taskCount <= 5){
            self.dueButton.backgroundColor = UIColor(red:243/255, green:156/255, blue:18/255, alpha:1.0)
            self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        }else if(self.taskCount > 5){
            self.dueButton.backgroundColor = UIColor(red:231/255, green:76/255, blue:60/255, alpha:1.0)
            self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        }

    }

感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:1)

不保证CloudKit方法的完成处理程序在主队列上运行,因此您必须将与用户界面相关的代码分配给它:

let taskManager = CloudKitTaskManager(database: CKContainer.defaultContainer().privateCloudDatabase)
    taskManager.getSummaryOfTasks {
        tasks in
        for index in 0...tasks.count-1 {
            if ("False" == tasks[index].completed){
                self.taskCount = self.taskCount + 1
            }
        }
        dispatch_async(dispatch_get_main_queue()) {
            self.dueButton.setTitle(String(self.taskCount) + "\nOutstanding", forState: UIControlState.Normal)
            if (self.taskCount == 0) {
                self.dueButton.backgroundColor = UIColor(red:52/255, green:152/255, blue:219/255, alpha:1.0)
                self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
            }else if(self.taskCount > 0 && self.taskCount <= 5){
                self.dueButton.backgroundColor = UIColor(red:243/255, green:156/255, blue:18/255, alpha:1.0)
                self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
            }else if(self.taskCount > 5){
                self.dueButton.backgroundColor = UIColor(red:231/255, green:76/255, blue:60/255, alpha:1.0)
                self.dueButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
            }
        }
    }