728x90
이번 글에서는 다이어로그 표시 부분 외를 클릭할 시 dismiss 되는 기능을 한 번 알아보겠습니다.
이 기능은 기본적으로 UIAlertController에서 제공하고 있는 기능이 아니기 때문에 UITapGestureRecognizer 를 사용하여 구현해 보겠습니다.
1. 프로젝트 생성 & 디자인
뭐 솔직히 이번 기능에는 디자인이라고 할 건 없습니다. 그냥 간단하게 버튼 하나만 구현하여 보겠습니다.
2. 코드
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func didTappedButton(_ sender: UIButton) {
let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
let action = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(action)
self.present(alert, animated: true) {
// completion에 제스처를 생성하여 줍니다.
let tap = UITapGestureRecognizer(target: self, action: #selector(self.didTappedOutside(_:)))
alert.view.superview?.isUserInteractionEnabled = true
alert.view.superview?.addGestureRecognizer(tap)
}
}
@objc
private func didTappedOutside(_ sender: UITapGestureRecognizer) {
self.dismiss(animated: true, completion: nil)
}
}
3. 마무리
이 기능은 많이 쓰일 것 같진 않지만 예를 들어 액션이 없는 다이어로그나 뭐 간단한 안내 다이어로그에 대해서는 사용해볼 수도 있다고 생각합니다. 이번 글에서도 많은 도움이 되었으면 좋겠습니다.
궁금하신 사항이나 지적은 댓글에 부탁드립니다.
감사합니다.
환경
Xcode 11.3.1
Swift 5
728x90
'Swift > 이슈 대응' 카테고리의 다른 글
[Swift] TableView 또는 CollectionView 의 didSelect 가 정상적으로 작동하지 않을 때 확인 사항 (0) | 2022.03.27 |
---|---|
[Swift] Realm 복수 쿼리로 데이터 추출하기 (0) | 2021.12.22 |
[Swift] iPad 멀티태스킹 대응 시 확인할 것 (4) | 2020.04.14 |