当我使用 tableView:editActionsForRowAt:在iOS应用程序中提供一些有用的功能时。
func tableView(_ tableView: UITableView,
editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
print(#function)
.... useful code .....
}
我到达了其他类似于上面的API的地步,但是向右滑动而不是像 tableView:editActionsForRowAt:那样向左滑动就可以触发。像这样说:
func tableView(_ tableView: UITableView,
editMoreActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
print(#function)
.... useful code .....
}
浏览网络时,我发现了UITableViewDelegate协议的以下两种方法:
tableView:leadingSwipeActionsConfigurationForRowAt
tableView:trailingSwipeActionsConfigurationForRowAt
经过一些基本的实验之后,我认为我可以使用 tableView:leadingSwipeActionsConfigurationForRowAt 来获得想要的功能,从而在向右滑动单元格时为用户提供更多功能。但是,似乎这种方法并没有提供太多的自由。例如,这里有我的代码(非常启发我在互联网上找到的一些示例):
func tableView(_ tableView: UITableView,
leadingSwipeActionsConfigurationForRowAt
indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let modifyAction = UIContextualAction(style: .normal, title: nil, handler: {
(ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
print("Update action ...")
success(true)
})
modifyAction.image = UIImage(named: "MyNiceIcon")!.withColor(color: .black)
modifyAction.backgroundColor = .clear
return UISwipeActionsConfiguration(actions: [modifyAction])
}
即使存在这些行,这里:
modifyAction.image = UIImage(named: "MyNiceIcon")!.withColor(color: .black)
modifyAction.backgroundColor = .clear
MyNiceIcon保持白色,按钮的背景为灰色。
我想念什么吗?还是可以仅使用白色的图像颜色? 而且背景色从不透明?
答案 0 :(得分:0)
我希望这会对您有所帮助。您可以设置任何滑动动作的背景颜色,甚至可以在一次滑动中创建一些背景颜色。一个简单的例子就是使用这样的东西:
@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let delete = deleteAction(at: indexPath)
return UISwipeActionsConfiguration(actions: [delete])
}
@available(iOS 11.0, *)
private func deleteAction(at indexPath: IndexPath) -> UIContextualAction {
let action = UIContextualAction(style: .destructive, title: "Delete") { (action, view, completion) in
let confirmDeletionAC = UIAlertController(title: "Delete", message: "Are you sure you want to delete this record?", preferredStyle: .alert)
let confirmAlertAction = UIAlertAction(title: "Delete", style: .default, handler: { (action) in
self.deleteObject(at: indexPath)
self.historicTableView.deleteRows(at: [indexPath], with: .automatic)
// print("SWIPED TO DELETE")
completion(true)
})
let cancelAlertAction = UIAlertAction(title: "Cancel", style: .cancel, handler: { (action) in
// print("DELETE CANCELLED")
completion(false)
})
confirmDeletionAC.addAction(cancelAlertAction)
confirmDeletionAC.addAction(confirmAlertAction)
self.present(confirmDeletionAC, animated: true)
}
action.backgroundColor = UIColor.flatWatermelon
return action
}
此代码来自我的一个项目,使我可以从右侧设置删除操作。如果要使动作从左侧发出,只需使用相同的函数,但使用leadingSwipeActionConfigurationForRowAt
返回UISwipeActionsConfiguration,则可以使用UIContextualAction元素数组。
答案 1 :(得分:0)
要设置原始图片,您可以创建UIImage
的自定义类并按如下方法覆盖方法withRenderingMode
class OriginalImageRender: UIImage {
override func withRenderingMode(_ renderingMode: UIImage.RenderingMode) -> UIImage {
return self
}
}
要使用:
if let cgImageX = UIImage(named: "MyNiceIcon")?.cgImage {
modifyAction.image = OriginalImageRender(cgImage: cgImageX, scale: UIScreen.main.nativeScale, orientation: .up)
}
以上代码会将图片显示为原始图片,并添加到图片资源中。
答案 2 :(得分:0)
1-只需在课程末尾添加该课程
class OriginalImageRender: UIImage {
override func withRenderingMode(_ renderingMode: UIImage.RenderingMode) -> UIImage {
return self
}
} 2-从您的UIImage创建一个cgImage
let cgImageX = UIImage(named: "delete")?.cgImage
3-将此cgImage传递给OriginalImageRender类,并将此图像添加到您的操作中
action.image = OriginalImageRender(cgImage: cgImageX!)
对我有用,希望对您有帮助