我希望进度条读取数组中的completed是否已完成值,如果完成后出现删除线,进度条也会更改
对不起,我可能不太清楚,但我想要以下内容
这是我的代码
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用于项目变量,但无效
答案 0 :(得分: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)
}
}
答案 1 :(得分: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)
}
}
答案 2 :(得分: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)