UITableView Cell重复

时间:2015-06-12 12:38:53

标签: ios swift uitableview custom-cell

我创建了一个包含显示数据的自定义单元格的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
    }

为什么会这样?我想这与细胞再利用有关。但物品的数量是否无法解决?

3 个答案:

答案 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
    }