UITableView 单元格重复
UITableView Cell repeating
我创建了一个带有显示数据的自定义单元格的表格视图。显示器工作正常。但是单元格是重复的,所以显示的单元格比数组中的项目更多。
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
}
为什么会这样?我想这与电池重用有关。但是物品的数量不解决吗?
问题是这个方法:
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
}
此方法要求的是节数。你应该return简单地从这个方法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:
。
您只需要部分。如果它是一个,那么只做一个。如果您有多个部分和每个部分的数据,则对每个部分使用该数据
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
您正在 return 计算数组的节数,这就是发生这种情况的原因,所以请 return 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
}
我创建了一个带有显示数据的自定义单元格的表格视图。显示器工作正常。但是单元格是重复的,所以显示的单元格比数组中的项目更多。
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
}
为什么会这样?我想这与电池重用有关。但是物品的数量不解决吗?
问题是这个方法:
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
}
此方法要求的是节数。你应该return简单地从这个方法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:
。
您只需要部分。如果它是一个,那么只做一个。如果您有多个部分和每个部分的数据,则对每个部分使用该数据
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
您正在 return 计算数组的节数,这就是发生这种情况的原因,所以请 return 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
}