Ios Swift-分拣表应立即更新视图
我是Swift的新手,因此我愿意接受任何与我的代码相关的建议,因为我担心应用程序的效率 我的目的是在每次调用操作时更新视图。-我的ViewController中有一个TableView,我希望用户能够在单击时对表asc或desc进行排序 从理论上讲,代码可以工作,用户可以单击给定的按钮,该按钮会更改Ios Swift-分拣表应立即更新视图,ios,swift,Ios,Swift,我是Swift的新手,因此我愿意接受任何与我的代码相关的建议,因为我担心应用程序的效率 我的目的是在每次调用操作时更新视图。-我的ViewController中有一个TableView,我希望用户能够在单击时对表asc或desc进行排序 从理论上讲,代码可以工作,用户可以单击给定的按钮,该按钮会更改isAsc。但我无法在点击按钮后立即更新视图。到目前为止,它只在我离开ViewController并通过preformSegue从另一个ViewController回来时更新 let defa
isAsc
。但我无法在点击按钮后立即更新视图。到目前为止,它只在我离开ViewController并通过preformSegue
从另一个ViewController回来时更新
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*,因为它们不创建任何数据
- 创建struct以管理数据模型
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*,因为它们不创建任何数据
- 创建struct以管理数据模型
viewDidLoad()
&sortTable()
@rmaddy中都被调用。它正在工作,谢谢大家!我将数组声明放在一个额外函数中,该函数现在在viewDidLoad()
和sortTable()
中都被调用。