我想为表视图编辑模式中出现的汉堡包图标使用自定义颜色,最好甚至使用自定义图像。我在一个较旧的主题中找到了这个Swift代码片段,最初是在Objective-C中(在这里找到:Change default icon for moving cells in UITableView):
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
if editing {
for view in subviews as [UIView] {
if view.dynamicType.description().rangeOfString("Reorder") != nil {
for subview in view.subviews as [UIImageView] {
if subview.isKindOfClass(UIImageView) {
subview.image = UIImage(named: "yourimage.png")
}
}
}
}
}
}
为了适应我的TableViewController
,我已经将开始循环的行更改为:
for view in tableView.subviews as [UIView] {
似乎有用,但找不到带有“重新排序”描述的视图。从那以后这个改变了吗?
我会在旧帖子中问过,但由于声誉我还不被允许。
非常欢迎任何见解!
编辑:我可以通过将上面的代码更改为:
来更改图像override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
if editing {
for cell in tableView.visibleCells {
for view in cell.subviews {
if view.dynamicType.description().rangeOfString("Reorder") != nil {
for subview in view.subviews as! [UIImageView] {
if subview.isKindOfClass(UIImageView) {
subview.image = UIImage(named: "yourimage.png")
//subview.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
}
}
}
}
}
}
}
但是,有一个错误,当向下滚动时并非所有图标都会被更改。一些单元格仍然会有原始图标。我想这与重复使用的细胞有关。这有什么解决方案吗?
编辑2 :我通过确保在cellForRowAtIndexPath
方法中执行相同的图像替换逻辑来解决上述问题。此外,我正在检查图像是否已经更改,因为如果之前有图像,图像会有奇怪的偏移。
override func setEditing(editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
if editing {
for cell in tableView.visibleCells {
setEditingAccessoryView(forCell: cell)
}
}
}
func setEditingAccessoryView(forCell cell: UITableViewCell) {
for view in cell.subviews {
if view.dynamicType.description().rangeOfString("Reorder") != nil {
for subview in view.subviews as! [UIImageView] {
if subview.isKindOfClass(UIImageView) {
if subview.image != UIImage(named: "yourImage.png") {
subview.image = UIImage(named: "yourImage.png")
//subview.frame = CGRect(x: 20, y: 20, width: 20, height: 20)
}
}
}
}
}
}
在cellForRowAtIndexPath中:
if editing {
setEditingAccessoryView(forCell: cell)
}
答案 0 :(得分:1)
很高兴我们将您的问题排序。对于您的最后一期,我建议您在cellForRowAtIndexPath:
中明确调用替换逻辑,以便在每次显示单元格时强制调用代码。
(顺便说一下,记录总是一个很好的方法来解决一个令人费解的问题,)