我是 Swift 的新手,因此我愿意接受任何与我的代码相关的建议,因为我担心应用程序的效率。
我的意图是在每次调用操作时更新 View 。 - 我的 ViewController 中有一个 TableView,我希望用户能够在单击时对表格进行升序或降序排序。
从理论上讲,代码可以工作,用户可以单击给定的按钮来更改 isAsc
。但是我无法在单击按钮后立即更新 View 。到目前为止,它仅在我离开 ViewController 并通过 preformSegue
从另一个返回时更新。
let defaults = UserDefaults.standard
var isAsc = true
var gefahreneKm: [String] = []
var date: [String] = []
var consumedLiters: [String] = []
var pricePerLiter: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
isAsc = defaults.bool(forKey: "isAsc")
gefahreneKm = createArray()
date = createArrayDate()
consumedLiters = createArrayConsumedL()
pricePerLiter = createArrayPricePerLitre()
self.toolbar.setBackgroundImage(UIImage(),
forToolbarPosition: .any,
barMetrics: .default)
self.toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)
timlineView.delegate = self
timlineView.dataSource = self
}
func createArray() -> [String] {
let arrayDrivenKmString = arrayDrivenKm.map{ String($0) }
if isAsc == true {
return arrayDrivenKmString
} else {
return arrayDrivenKmString.reversed()
}
}
func createArrayDate() -> [String] {
if isAsc == true {
return arrayDate
} else {
return arrayDate.reversed()
}
}
func createArrayConsumedL() -> [String] {
if isAsc == true {
return arrayConsumedL
} else {
return arrayConsumedL.reversed()
}
}
func createArrayPricePerLitre() -> [String] {
if isAsc == true {
return arrayPricePerLiter
} else {
return arrayPricePerLiter.reversed()
}
}
@IBAction func buttonBack(_ sender: Any) {
performSegue(withIdentifier: "goBackToMain", sender: self)
}
@IBAction func sortTable(_ sender: Any) {
isAsc = !isAsc
defaults.set(isAsc, forKey: "isAsc")
}
最佳答案
您需要在排序后重新创建需要更改的数据并重新加载表才能看到更改。
func createData() {
gefahreneKm = createArray()
date = createArrayDate()
consumedLiters = createArrayConsumedL()
pricePerLiter = createArrayPricePerLitre()
}
override func viewDidLoad() {
super.viewDidLoad()
isAsc = defaults.bool(forKey: "isAsc")
createData()
// Rest of the code
}
@IBAction func sortTable(_ sender: Any) {
isAsc = !isAsc
defaults.set(isAsc, forKey: "isAsc")
createData()
timlineView.reloadData()
}
一些建议:
将函数从 create* 重命名为 get*,因为它们不创建任何数据。
创建结构来管理您的数据模型。
关于ios - Swift - sortTable 应立即更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55802316/