如何根据选择的日期显示 UITableView?

Posted

技术标签:

【中文标题】如何根据选择的日期显示 UITableView?【英文标题】:How to display UITableView according to day selected? 【发布时间】:2016-12-29 05:36:08 【问题描述】:

我有一个带有 2 个按钮的表格视图,一个按钮用于 today,第二个按钮用于 yesterday,如下所示以及以下数据,其中 tDays 的整数数组表示工作日的值,例如 Sunday = 1,....Saturday = 7

var tAnimals:[String] = ["Cat", "Dog", "Rabbit"]
var tDays:[[Int]] = [[3,4],[4,5],[5,6]]

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate 

@IBOutlet weak var myTableView: UITableView!
@IBOutlet weak var todayBtn: UIButton!
@IBOutlet weak var yesterdayBtn: UIButton!

override func viewDidLoad() 
    super.viewDidLoad()


func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int

    return tAnimals.count


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let myCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell
    myCell.titleLabel.text = "Animals"
    return myCell


现在当我按todayBtn 时,我喜欢在表格视图中看到Dog and Rabbit,因为今天是Thursday = 5,我按yestredayBtn,我喜欢看到Cat and Dog,因为它是Wednesday = 4

我遇到了这个扩展来寻找工作日的价值,但不知道如何将它应用为按钮标签

extension Date 
    func dayNumberOfWeek() -> Int? 
        return Calendar.current.dateComponents([.weekday], from: self).weekday
    

有没有办法可以将工作日的值分配为按钮标签,以便它们每天自动更新并显示正确的数据。

【问题讨论】:

您可以在 viewDidLoad 中设置按钮的标签,然后在按钮操作上设置适当的数组并重新加载 tableview 【参考方案1】:

可能是这样的,可能需要一些折射,我希望你能得到基本的想法:

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate 

    var tAnimals:[String] = ["Cat", "Dog", "Rabbit"]
    var tDays:[[Int]] = [[3,4],[4,5],[5,6]]
    var arrdata:[String] = []
    var today:Int!
    var day:Int!

    @IBOutlet weak var myTableView: UITableView!
    @IBOutlet weak var todayBtn: UIButton!
    @IBOutlet weak var yesterdayBtn: UIButton!


    override func viewDidLoad() 
        super.viewDidLoad()

        today = Date().dayNumberOfWeek()
    

    //connect this IBAction with todayBtn & yesterdayBtn
    @IBAction func actChangeData(_ sender: UIButton) 

        arrdata.removeAll()
        if sender == todayBtn 
            day = today
         else 
            day = today - 1
        

        for i in 0...tAnimals.count-1 
           if tDays[i].contains(day) 
               arrdata.append(tAnimals[i])
            
        

        myTableView.reloadData()
    

    func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int 
        return arrdata.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let myCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell
        myCell.titleLabel.text = arrdata[indexPath.row]
        return myCell
    


extension Date 
    func dayNumberOfWeek() -> Int? 
        return Calendar.current.dateComponents([.weekday], from: self).weekday
    

【讨论】:

感谢您的回复,但当我同时按下 todayBtn 和昨天 Btn 时,我得到相同的结果 Cat,Cat, Dog, Dog, Rabbit, Rabbit。 func actChangeData(_ sender: UIButton) 更新了工作代码! 这行得通,但无论如何我只能显示那天的数据我的意思是当我按今天Btn 时,我喜欢看狗和兔子,我按昨天Btn,我喜欢看猫和狗。但是现在每次我按下按钮时数据都会重复。 是的,在每次过滤之前使用arrdata.removeAll() 更新代码。

以上是关于如何根据选择的日期显示 UITableView?的主要内容,如果未能解决你的问题,请参考以下文章

无法根据来自 UIPickerView 的选择器更新 UITableView 数据

根据上次日期选择记录

在UITableView中重新加载部分

如何在 UITableView 中设置 UILabel 的动作

UITableview 根据所选单元格显示不同的数据

基于json文件动态显示选择、复选框、日期选择器等