如何使用进度条显示阵列中迅速计数

问题描述 投票:0回答:3

我想在进度条读取是否在我的阵列完成已完成值,如果有删除线完成,进度条也会随之变化时

对不起,我可能不太清楚,但我想要如下

enter image description here

这是我的代码

   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但它无效

ios swift nsarray progress
3个回答
0
投票

你有一个新的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)
    }
}

0
投票

您还没有提供这标志着列表为完整的代码。

但是,根据您的实现,您必须在将列表标记为完成后重新分配具有相同值的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)


0
投票

试试这个:

@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)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.