在渲染tableview swift 2之前添加一行

时间:2016-04-28 13:30:28

标签: ios swift uitableview swift2

我想在调用tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int方法之前在我的tableview中添加一行。我尝试将其用于viewDidLoad()方法而不成功是否可能?如何 ?

这是我的代码:

import UIKit

class CustomTestViewController : UITableViewController {

    @IBOutlet var formDetailTableView: UITableView!
    var data: Data?
    var firstData: FirstData?

    struct CurrentFormTableView {
        struct CellIdentifiers {
            static let MyCell = "MyCell"
            static let MyFirstCell = "MyFirstCell"
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        //HERE ADD THE FIRST ROW ?
                    let cell = tableView.dequeueReusableCellWithIdentifier(CurrentFormTableView.CellIdentifiers.MyFirstCell, forIndexPath: indexPath) as! MyFirstCell
                    cell.displayCell(firstData)
                    return cell
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
                    let cell = tableView.dequeueReusableCellWithIdentifier(CurrentFormTableView.CellIdentifiers.MyCell, forIndexPath: indexPath) as! MyCell
                    cell.displayCell(data[indexPath.row])
                    return cell
    }

}

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,这个问题很容易:)

你总是希望在你的tableView中显示第一个单元格,无论你的数据数组中是否有数据:)你的问题是你不能将第一个对象添加到数据数组中,好吧伙计:)

这是一个解决方案:)

不要在ViewDidLoad中做任何事情:)只需将第一行数据对象保存在局部变量中即可说:yourCustomObject

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell : myTestCell = tableView.dequeueReusableCellWithIdentifier("testCell")! as! myTestCell

        if indexPath.row == 0 {
             cell.nameLabel.text = yourCustomObject.property
        }
        else {
            cell.nameLabel.text = data[indexPath.row -1].property
        }
        return cell
    }

问题解决了:)快乐的编码:)

工作原理: 简单,

假设你的数据数组为空:)然后它将返回计数为0 :)但是你总是希望显示你的第一个单元格不是它:)所以在数据数组中添加+1 :) return data.count + 1

现在在cellForRowAtIndexPath中小心处理。您不希望最终访问第一个对象的数据数组中的数据,因此请检查indexpath 0。

并且您不希望最终从数据索引中访问对象,因此请使用data[indexPath.row -1]

希望我明白我的观点:)快乐编码

答案 1 :(得分:1)

 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return data.count + 1 //Add plus 1 for firstData
 }

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
   let cell = tableView.dequeueReusableCellWithIdentifier(CurrentFormTableView.CellIdentifiers.MyCell, forIndexPath: indexPath) as! MyCell

   if indexPath.row == 0 {//First index will be firstData
        cell.displayCell(firstData)    
   } else { //All other cell's will be filled with data array
        cell.displayCell(data[indexPath.row - 1]) //Make sure you offset indexPath.row by 1 so you start at index 0 of data array
   }
    return cell
}