这是我的要求:
我希望我的tableView的单元格像最后一个单元格一样,它的边框是tableView的一些像素,而不是与tableview的边缘相矛盾。(我想这是因为当我点击单元格时,单元格上有灰色效果)
怎么办?
答案 0 :(得分:0)
你不能调整单元格的大小,而是你可以设置视图的图层属性来达到类似的效果,例如,(你没有提到你正在使用哪种语言,我假设你正在使用swift)。
我假设您的自定义单元格包含UIView和其他一些视图组件,如下所示
并在上图中添加imageHolderView
的插座,
out,名称将为holderView
,如下图所示,
在自定义单元格类中,定义两种选择管理方法,您的自定义单元格类如下所示,
class CustomCell: UITableViewCell {
@IBOutlet weak var circleNameTextField: UILabel!
@IBOutlet weak var holderView: UIView!
var cellindexPath:IndexPath?
var selectedIndexPath:IndexPath?
func selectTheCell() {
if self.selectedIndexPath?.row == self.cellindexPath?.row {
self.holderView.layer.cornerRadius = 6.0
self.holderView.layer.masksToBounds = true
self.holderView.layer.borderWidth = 4.0
self.holderView.layer.borderColor = UIColor.red.cgColor
self.backgroundColor = UIColor.gray
} else {
self.resetCellWith(animate: false)
}
}
func resetCellWith(animate:Bool) {
self.holderView.layer.cornerRadius = 0.0
self.holderView.layer.masksToBounds = false
self.holderView.layer.borderWidth = 0.0
self.holderView.layer.borderColor = UIColor.clear.cgColor
self.backgroundColor = UIColor.orange
}
}
现在你要做的就是从控制器调用上面的方法并更新单元格行为,例如,
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.selIndexPath = indexPath
self.aTableView.reloadSections(IndexSet(integer: 0), with: .none)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell : CustomCell? = tableView.dequeueReusableCell(withIdentifier: "CUSTOM_CELL", for: indexPath) as? CustomCell//tableView.dequeueReusableCell(withIdentifier: "CUSTOM_CELL") as? CustomCell
cell?.cellindexPath = indexPath
if let selectedIndexPath = self.selIndexPath {
cell?.selectedIndexPath = selectedIndexPath
cell?.selectTheCell()
} else {
cell?.resetCellWith(animate:false)
}
cell?.selectionStyle = .none
return cell!
}
通过上述安排,您可以获得表格单元格和选择,如下所示,
注意:以上是实现此效果的一种方法。和方法名称我只是使用我为不同目的创建的示例项目。 :)