셀을 길게 누를 시, 팝업되는 창을 Context Menu
라고 한다.
Preview
: 위쪽에 있는 뷰Action
: 아래쪽의 액션스와이프 액션을 추가해준 경우, context menu도 추가해주는 것이 좋다.
override func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
var children = [UIAction]()
let renameAction = UIAction(title: "이름바꾸기", image: UIImage(systemName: "square.and.pencil")) { _ in
~액션 실행 내용~
}
children.append(renameAction)
...
return UIContextMenuConfiguration { elements in
UIMenu(children: children)
}
}
UIContextMenuConfiguration
생성자의 previewProvider
속성으로 전달...
if target.type == .file && isImage {
return UIContextMenuConfiguration {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
guard let vc = storyboard.instantiateViewController(withIdentifier: String(describing: ImagePreviewViewController.self)) as? ImagePreviewController else {
return nil
}
if let data = try? Data(contentsOf: target.url) {
vc.image = UIImage(data: data)
}
return vc
} actionProvider: { elements in
UIMenu(children: children)
}
}