我创建了一个包含显示数据的自定义单元格的tableview。显示效果很好。但是细胞正在重复,因此有更多的细胞显示在阵列中的物品上。
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// when searchcontroller is active, return the number of search results. If inactive simply return the count of the full AED list.
return self.AEDItems.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.AEDItems.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "Cell"
let cell:CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! CustomTableViewCell
// Check if controller is active. If user is doing a search retrieve the aeds from the search result rather than the AED array.
let aed = self.AEDItems[indexPath.row]
cell.addressLabel?.text = aed.owner
cell.objectLabel?.text = aed.street
return cell
}
为什么会这样?我想这与细胞再利用有关。但物品的数量是否无法解决?
答案 0 :(得分:2)
问题是这个方法:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// when searchcontroller is active, return the number of search results. If inactive simply return the count of the full AED list.
return self.AEDItems.count
}
此方法要求的部分数量。您应该从此方法返回1
。
相反,您拥有与AEDItems
数组中的对象一样多的部分。然后在你的其他方法中,你没有把任何部分特定的逻辑。所以每个部分都是相同的。但实际上我们只想要一个有很多行的部分。
所以,我们实际上只想要:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// when searchcontroller is active, return the number of search results. If inactive simply return the count of the full AED list.
return 1
}
或者,正如 @johnpatrickmorgan 在评论中澄清的那样,我们可以完全省略这个可选的协议方法,因为UITableView
假定只有一个部分,如果datasource
省略了这个方法
如需更多阅读,请查看UITableView Data Source protocol documentation regarding numberOfSectionsInTableView:
。
答案 1 :(得分:2)
你需要只有部分。如果它是一个然后只有一个。如果每个部分有多个部分和数据,则将这些数据用于每个部分
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// when searchcontroller is active, return the number of search results. If inactive simply return the count of the full AED list.
return 1
//return self.AEDItems.count
}
要体验Section,请使用UITableView的以下方法
func tableView( tableView : UITableView, titleForHeaderInSection section: Int)->String {
return "Section"
}
func tableView (tableView:UITableView , heightForHeaderInSection section:Int)->Float
{
return 20.0
}
我建议您查看本教程Customizing Header and Footer of Table View in iOS8 with Swift
答案 2 :(得分:1)
您正在返回数组的计数,以了解其发生的原因,请返回1个部分。
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// when searchcontroller is active, return the number of search results. If inactive simply return the count of the full AED list.
return 1
}