Swift-sortTable应该立即更新视图

时间:2019-04-22 23:24:54

标签: ios swift

我是Swift的新手,因此我愿意接受与我的代码相关的任何建议,因为我担心应用程序的效率。

我的意图是在每次调用动作时更新视图。 -我的ViewController内部有一个TableView,我希望用户能够在单击时对表asc或desc进行排序。

从理论上讲,该代码有效,并且用户可以单击更改isAsc的给定按钮。但是单击按钮后,我无法立即更新视图。到目前为止,它仅在我离开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")
    }

1 个答案:

答案 0 :(得分:0)

您需要重新创建需要在排序和重新加载表之后更改的数据才能查看更改。

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 *,因为它们没有创建任何数据。

  • 创建结构来管理数据模型。