-1

セルがセクション ヘッダーのテキストとして作成された月と年を含むセクション ヘッダーを表示しようとしています。これは私のコードですが、そのようにセクションヘッダーが1つしか表示されません。セルが作成された年と月を表示する理由と方法を教えてください。

  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
        }





    }
4

2 に答える 2

0

そのため、コード例を以下に示します (コードは明らかにテストされていません)。配列に保持されているオブジェクトにdateCreatedを含むプロパティがあると仮定しました。NSDatetasks

コード例:

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.beginUpdatesますtblTasks.endUpdates。削除する場合も同様です。

于 2016-05-15T21:35:01.923 に答える