【问题标题】:Swift: Trying to set a ui button title using a completion handlerSwift:尝试使用完成处理程序设置 ui 按钮标题
【发布时间】:2021-06-01 18:54:53
【问题描述】:

我正在尝试使用来自 firebase 的数据来填充 UI 上的按钮。除了按钮标题没有更新外,一切都按预期工作。有关如何解决此问题的任何想法?

@IBAction func addNewTapped(_ sender: Any) {

    readOneDay2(lastMonday(trackerDate), completion: { message in
            let lastHourRead = message
            print(message)
            self.lastHour1.setTitle(lastHourRead, for: UIControl.State.application)

    })
}

func readOneDay2 (_ mydate: Date, completion: @escaping (_ message: String) -> Void){
    
    var db: DatabaseReference!
    db = Database.database().reference()
    var totalComb: Double = 0.0
    let userID = Auth.auth().currentUser?.uid
    db.child("TimesheetData").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
        // Get user value
        let dict = snapshot.value as? NSDictionary
        
        for (key, value) in dict! {
            
            let myvalue = value as? [String: Any]
            let compDate: String = myvalue!["timeSheetDate"]! as! String
            if compDate == dateStringer(mydate) {
                let sHours: String = myvalue!["hours"]! as! String
                let sOverTime: String = myvalue!["overTime"]! as! String
                let sDoubleTime: String = myvalue!["doubleTime"]! as! String
                let dHours: Double = Double(sHours)!
                let dOverTime: Double = Double(sOverTime)!
                let dDoubleTime: Double = Double(sDoubleTime)!
                totalComb = totalComb + dHours + dOverTime + dDoubleTime
                print(key)
                
            }
        }
        print("First Sum " + String(totalComb))
        DispatchQueue.main.async {
            completion(String(totalComb))
        }
      }) { (error) in
        print(error.localizedDescription)
    }
    
    
} 

【问题讨论】:

  • 更改 UIControl.State.application -> UIControl.State.normal
  • 嗨 Virender,这似乎没有解决问题。

标签: ios swift firebase-realtime-database uibutton


【解决方案1】:

正如@Virender 所说,

将 UIControl.State.application 更改为 UIControl.State.normal

    DispatchQueue.main.async {
        self.lastHour1.setTitle(lastHourRead, for:.normal)
    }

【讨论】:

  • 我做了那个改变,但没有效果。
  • 你确定你收到了 log : print(message)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
相关资源
最近更新 更多