我想在调用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
}
}
答案 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
}