구현 내용
- 컬렉션 뷰의 아이템을 길게 누르면 "Download" 라는 글과 함께 메서드가 호출된다.
구현 코드
- 해당 컬렉션 뷰의 아이템들은 Home 뷰에 있는 테이블에 등록된 것이다.
- 해당 컬렉션 뷰 셀이 있는 파일 내에 아래 코드를 추가한다.
import UIKit
class CollectionViewTableViewCell: UITableViewCell {
...
private func downloadTitleAt(indexPath: IndexPath) {
DatePersistenceManager.shared.downloadTitleWith(model: titles[indexPath.row]) { result in
switch result {
case .success():
NotificationCenter.default.post(name: NSNotification.Name("downloaded"), object: nil)
case .failure(let error):
print(error.localizedDescription)
}
}
}
}
extension CollectionViewTableViewCell: UICollectionViewDelegate, UICollectionViewDataSource {
...
func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemsAt indexPaths: [IndexPath], point: CGPoint) -> UIContextMenuConfiguration? {
let config = UIContextMenuConfiguration(
identifier: nil,
previewProvider: nil) { _ in
let downloadAction = UIAction(
title: "Download",
image: nil,
identifier: nil,
discoverabilityTitle: nil,
state: .off) { _ in
self.downloadTitleAt(indexPath: indexPaths.first!)
}
return UIMenu(title: "", image: nil, identifier: nil, options: .displayInline, children: [downloadAction])
}
return config
}
}
func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemsAt indexPaths: [IndexPath], point: CGPoint) -> UIContextMenuConfiguration?
- 이 메서드는 컬렉션 뷰의 아이템에 대한 컨텍스트 메뉴 구성을 요청받을 때 호출된다.
let config = UIContextMenuConfiguration(
identifier: nil,
previewProvider: nil) { _ in
// 메뉴 아이템 구성
}
- 이 부분에서 컨텍스트 메뉴의 기본 구성을 생성한다.
let downloadAction = UIAction(
title: "Download",
image: nil,
identifier: nil,
discoverabilityTitle: nil,
state: .off) { _ in
self.downloadTitleAt(indexPath: indexPaths.first!)
}
- "Download"라는 제목의 액션을 생성한다. 이 액션이 선택되면 downloadTitleAt 메서드가 호출된다.
return UIMenu(title: "", image: nil, identifier: nil, options: .displayInline, children: [downloadAction])
- downloadAction을 포함하는 UIMenu를 생성한다. .displayInline 옵션은 메뉴 아이템을 인라인으로 표시한다.
return config
- 생성된 컨텍스트 메뉴 구성을 반환한다.
'iOS > UIKIT' 카테고리의 다른 글
Xcode에서 iPhone Orientation 설정 (0) | 2024.08.01 |
---|---|
코어 데이터 사용해보기 (0) | 2024.07.11 |
검색 결과로 나온 영화 포스터를 누르면 상세페이지로 넘어가기 (0) | 2024.07.10 |
랜덤으로 영화 표시하기 (0) | 2024.07.10 |
webkit을 통해 유튜브 영상의 주소로 영상 틀어보기 (0) | 2024.07.08 |