每次创建一个显示月份和年份的新单元格时添加TableViewCell Section Header - swift

时间:2016-05-15 18:56:23

标签: ios swift uitableview uitableviewsectionheader

我正在尝试显示一个节标题,其中创建单元格的月份和年份作为节标题中的文本。这是我的代码,但它只显示一个节标题。知道为什么以及如何让它显示单元格创建的年份和月份?

  import UIKit


class PRViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet var tblTasks : UITableView!

    //For persisting data
    let defaults = NSUserDefaults.standardUserDefaults()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tblTasks.reloadData()
         tblTasks.registerNib(UINib(nibName: "PRTableViewCell", bundle: nil), forCellReuseIdentifier: "PRTableCell")
        tblTasks.tableFooterView = UIView()

    }

    override func viewWillAppear(animated: Bool) {
        self.tblTasks.reloadData()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


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



        return 1

    }


    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return "Your PR's"
    }

    //Define how our cells look - 2 lines a heading and a subtitle
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        let identifier = "PRTableCell"
        var cell: PRTableViewCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? PRTableViewCell

        if cell == nil {
            tableView.registerNib(UINib(nibName: "PRTableViewCell", bundle: nil), forCellReuseIdentifier: identifier)
            cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? PRTableViewCell
        }


//        Assign the contents of our var "items" to the textLabel of each cell
//        cell.textLabel!.text = taskMgr.tasks[indexPath.row].name
//        cell.detailTextLabel!.text = taskMgr.tasks[indexPath.row].desc

        cell.PRLabel.text = taskMgr.tasks[indexPath.row].name
        cell.NotesLabel.text = taskMgr.tasks[indexPath.row].desc
        cell.WeightLabel.text = taskMgr.tasks[indexPath.row].weight + "lb"






        return cell



    }

    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath){

        if (editingStyle == UITableViewCellEditingStyle.Delete){

            taskMgr.removeTask(indexPath.row)
            tblTasks.reloadData()
        }


         func numberOfSectionsInTableView(tableView: UITableView) -> Int {

            // #warning Incomplete implementation, return the number of sections

            let numberOfSections = taskMgr.tasks.count



            return numberOfSections
        }





    }

2 个答案:

答案 0 :(得分:0)

这是一种方法。请注意,此代码假定您的单元格数据位于名为“cellArray”的数组中。它显示一个从今天开始的日期,并在每个部分返回一天。显然你需要替换你的日期。

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return self.cellArray.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath)

    // TODO: configure cell for display using self.cellArray[indexPath.section]

    return cell
}

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    let df = NSDateFormatter()
    df.dateStyle = .MediumStyle
    df.timeStyle = .NoStyle

    // TODO: determine the actual date
    let displayDate = NSDate().dateByAddingTimeInterval(Double(section * -86400))

    return df.stringFromDate(displayDate)
}

答案 1 :(得分:0)

下面是示例代码(代码未经过明确测试)。我假设在dateCreated数组中保存的对象中有一个NSDate属性包含tasks

示例代码:

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

    return 1
}

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    let formatter = NSDateFormatter() // This is slightly inefficient for a large number of rows because setting up NSDateFormatter is expensive. You could make this a property. 
    formatter.dateStyle = .ShortStyle
    formatter.timeStyle = .NoStyle

    let sectionHeaderDate = taskMgr.tasks[section].dateCreated

    let dateString = formatter.stringFromDate(sectionHeaderDate)
    return dateString
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let identifier = "PRTableCell"
    var cell: PRTableViewCell! = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath:idx) as? PRTableViewCell // You must register a class or nib file using the registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier: method before calling this method (http://stackoverflow.com/q/12737860/558933).

    cell.PRLabel.text = taskMgr.tasks[indexPath.row].name
    cell.NotesLabel.text = taskMgr.tasks[indexPath.row].desc
    cell.WeightLabel.text = taskMgr.tasks[indexPath.row].weight + "lb" // Note iOS 9 allows you to localise weights rather than hard-coding "lb" or "kg". You should look at the documentation.

    return cell
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    let numberOfSections = taskMgr.tasks.count
    return numberOfSections
}

添加新的"部分"到UITableView,您必须将新数据添加到数组taskMgr.tasks,然后重新加载表或仅更新添加的行。在tblTasks.beginUpdatestblTasks.endUpdates中包含这些代码行。同样,删除。