ios - Swift - sortTable 应立即更新 View

标签 ios swift

我是 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/

相关文章:

ios - 如何指定在 UITableView 中显示哪些单元格?

ios - CONFIGURATION_AppStore。这是什么?

ios - 如何同时获取更新(currentTime :) function uses?(调用前)

ios - 在已持久化对象的 RLMArray 属性中插入对象?

ios - 将可选图像 UIImageView 传递给另一个 View Controller

ios - 一个部分中有两个原型(prototype)电池

string - 在 Swift String 中查找字符索引

ios - 如何在 UIImagepickercontroller 中隐藏状态栏?

ios - MKMapView 的状态恢复稍微缩小

ios - 更改以相同手势将一个 View 拖动到另一个 View