[英]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.