簡體   English   中英

如何使用進度條快速顯示數組計數

[英]how to use progress bar show array count in swift

我希望進度條讀取數組中已完成的值是否已完成,如果完成時出現刪除線,進度條也會更改

抱歉,我可能不太清楚,但我想要以下內容

在此處輸入圖片說明

這是我的代碼

   class ListTableViewController: UITableViewController {     

   @IBOutlet weak var progressView: UIProgressView!

   var progress: Float {
       if item.lists.count > 0 {
           return Float(item.lists.filter({$0.completed}).count) / Float(item.lists.count)
       } else {
           return 0
       }
   }

   var item: ItemCard! {
       didSet {
           if let progressView = progressView {
           // it's not work
           progressView.setProgress(progress, animated: true)
           }
       }
}

這是我的數據。 列表= ItemCard中的列表。 我想在列表中完成進度欄的顯示。

class ItemCard: NSObject, Codable {

  var title: String
  var isFinish: Bool
  var lists = [List]()


  init(title: String, isFinish: Bool) {
      self.title = title
      self.isFinish = false
      super.init()
  }
  }

class List: NSObject, Codable {

  var name: String
  var completed:Bool

  init(name:String, completed:Bool) {
      self.name = name
      self.completed = completed
  } 
 }

我將didSet用於項目變量,但無效

每次擁有新的ItemCard ,請計算已完成列表的數量,除以列表數量,然后更新進度。 應該看起來像這樣。

var item: ItemCard! {
    didSet {
        let completedListsCount = self.item.lists.map { $0.completed }
                                                 .filter { $0 }
                                                 .count
        let progress = Double(completedLists.count / self.item.lists.count)
        progressView.setProgress(progress, animated: true)
    }
}

您尚未提供將列表標記為完整的代碼。

但是,根據您的實現,在將列表標記為完整之后,您必須重新分配具有相同值的self.item。 例如,如果您將列表標記為“完整”,則點擊某行后, didSelectRowAt會像

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let item = self.item
    let list = item!.lists[indexPath.row]
    list.completed = true

    self.item = item

    tableView.reloadRows(at: [indexPath], with: .automatic)
}

或在將列表標記為完成后立即調用以下代碼

progressView.setProgress(progress, animated: true)

嘗試這個:

@IBOutlet weak var progresview: UIProgressView!
let sampleArray = [10, 20, 30, 40, 50,60,70,80]
let arrayCount = sampleArray.count
if sampleArray.count > 0 {
   for i in 1...sampleArray.count {
                let progress = (Float((Int(i)))/Float(arrayCount))
                self.progressview.setProgress(Float(progress),animated:true)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM