250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- GIT
- tip
- pubspec
- protocol
- flutter
- UIAccessibility
- algorithm
- Widget
- ToDoRim
- Swift
- Equatable
- basic
- it
- reetcode
- Leetcode
- enumerations
- IOS
- COMMIT
- listview
- Extentsion
- OSLog
- designPattern
- swiftlint
- pubspec.yaml
- dart
- xcode
- SwiftGen
- toyproject
- keyWindow
- github
Archives
- Today
- Total
수니의 개발새발
[iOS/Swift] UIAlertController를 사용하여 Alert 만들기 본문
728x90
반응형
📌 이번 글은
UIAlertController를 사용하여 얼럿을 띄우는 방법입니다.
어디서든 얼럿을 노출할 수 있도록 static 클래스 소스로 작성하였습니다.
1. UIWindow+Ext.swift 준비
얼럿의 경우 최상위 뷰에 띄우는 경우가 많죠.
얼럿 호출 뷰의 디폴트 값을 최상위 뷰로 하기 위해, 최상위 뷰 컨트롤러를 얻는 UIWindow Extension을 먼저 추가해주세요.
import UIKit
extension UIWindow {
public var visibleViewController: UIViewController? {
return self.visibleViewControllerFrom(vc: self.rootViewController)
}
/**
# visibleViewControllerFrom
- Author: suni
- Date:
- Parameters:
- vc: rootViewController 혹은 UITapViewController
- Returns: UIViewController?
- Note: vc내에서 가장 최상위에 있는 뷰컨트롤러 반환
*/
public func visibleViewControllerFrom(vc: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let nc = vc as? UINavigationController {
return self.visibleViewControllerFrom(vc: nc.visibleViewController)
} else if let tc = vc as? UITabBarController {
return self.visibleViewControllerFrom(vc: tc.selectedViewController)
} else {
if let pvc = vc?.presentedViewController {
return self.visibleViewControllerFrom(vc: pvc)
} else {
return vc
}
}
}
2. CommonAlert.swift
import UIKit
class CommonAlert {
/**
# showAlertAction1
- Author: suni
- Date:
- Parameters:
- vc: 알럿을 띄울 뷰컨트롤러
- preferredStyle: 알럿 스타일
- title: 알럿 타이틀명
- message: 알럿 메시지
- completeTitle: 확인 버튼명
- completeHandler: 확인 버튼 클릭 시, 실행될 클로저
- Returns:
- Note: 버튼이 1개인 알럿을 띄우는 함수
*/
static func showAlertAction1(vc: UIViewController? = UIApplication.shared.keyWindow?.visibleViewController, preferredStyle: UIAlertController.Style = .alert, title: String = "", message: String = "", completeTitle: String = "확인", _ completeHandler:(() -> Void)? = nil){
guard let currentVc = vc else {
completeHandler?()
return
}
DispatchQueue.main.async {
let alert = UIAlertController(title: title, message: message, preferredStyle: preferredStyle)
let completeAction = UIAlertAction(title: completeTitle, style: .default) { action in
completeHandler?()
}
alert.addAction(completeAction)
currentVc.present(alert, animated: true, completion: nil)
}
}
/**
# showAlertAction2
- Author: suni
- Date:
- Parameters:
- vc: 알럿을 띄울 뷰컨트롤러
- preferredStyle: 알럿 스타일
- title: 알럿 타이틀명
- message: 알럿 메시지
- cancelTitle: 취소 버튼명
- completeTitle: 확인 버튼명
- cancelHandler: 취소 버튼 클릭 시, 실행될 클로저
- completeHandler: 확인 버튼 클릭 시, 실행될 클로저
- Returns:
- Note: 버튼이 2개인 알럿을 띄우는 함수
*/
static func showAlertAction2(vc: UIViewController? = UIApplication.shared.keyWindow?.visibleViewController, preferredStyle: UIAlertController.Style = .alert, title: String = "", message: String = "", cancelTitle: String = "취소", completeTitle: String = "확인", _ cancelHandler: (() -> Void)? = nil, _ completeHandler: (() -> Void)? = nil){
guard let currentVc = vc else {
completeHandler?()
return
}
DispatchQueue.main.async {
let alert = UIAlertController(title: title, message: message, preferredStyle: preferredStyle)
let cancelAction = UIAlertAction(title: cancelTitle, style: .cancel) { action in
cancelHandler?()
}
let completeAction = UIAlertAction(title: completeTitle, style: .default) { action in
completeHandler?()
}
alert.addAction(cancelAction)
alert.addAction(completeAction)
currentVc.present(alert, animated: true, completion: nil)
}
}
/**
# showAlertAction3
- Author: suni
- Date:
- Parameters:
- vc: 알럿을 띄울 뷰컨트롤러
- preferredStyle: 알럿 스타일
- title: 알럿 타이틀명
- message: 알럿 메시지
- cancelTitle: 취소 버튼명
- completeTitle: 확인 버튼명
- destructiveTitle: 삭제 버튼명
- cancelHandler: 취소 버튼 클릭 시, 실행될 클로저
- completeHandler: 확인 버튼 클릭 시, 실행될 클로저
- destructiveHandler: 삭제 버튼 클릭 시, 실행될 클로저
- Returns:
- Note: 버튼이 3개인 알럿을 띄우는 함수
*/
static func showAlertAction3(vc: UIViewController? = UIApplication.shared.keyWindow?.visibleViewController, preferredStyle: UIAlertController.Style = .alert, title: String = "", message: String = "", cancelTitle: String = "취소", completeTitle: String = "확인", destructiveTitle: String = "삭제", _ cancelHandler:(() -> Void)? = nil, _ completeHandler:(() -> Void)? = nil, _ destructiveHandler:(() -> Void)? = nil){
guard let currentVc = vc else {
completeHandler?()
return
}
DispatchQueue.main.async {
let alert = UIAlertController(title: title, message: message, preferredStyle: preferredStyle)
let cancelAction = UIAlertAction(title: cancelTitle, style: .cancel) { action in
cancelHandler?()
}
let destructiveAction = UIAlertAction(title: destructiveTitle, style: .destructive) { action in
cancelHandler?()
}
let completeAction = UIAlertAction(title: completeTitle, style: .default) { action in
completeHandler?()
}
alert.addAction(cancelAction)
alert.addAction(destructiveAction)
alert.addAction(completeAction)
currentVc.present(alert, animated: true, completion: nil)
}
}
}
어디서든 여러 타입의 얼럿을 쉽게 가져와 쓰기 위해, 얼럿 노출 기능을 static 함수로 만든 소스입니다.
3. 사용 예제 (preferredStyle = .alert)
UIAlertController.Style이 .alert인 사용 예제 소스입니다.
버튼 1개
CommonAlert.showAlertAction1(vc: self, preferredStyle: .alert, title: "Alert Style", message: "1 Button Alert")
버튼 2개
CommonAlert.showAlertAction2(vc: self, preferredStyle: .alert, title: "Alert Style", message: "2 Button Alert")
버튼 3개
CommonAlert.showAlertAction3(vc: self, preferredStyle: .alert, title: "Alert Style", message: "3 Button Alert")
4. 사용 예제 (preferredStyle = .actionSheet)
UIAlertController.Style이 .actionSheet인 사용 예제 소스입니다.
버튼 1개
CommonAlert.showAlertAction1(vc: self, preferredStyle: .actionSheet, title: "Action Sheet Style", message: "1 Button Action Sheet")
버튼 2개
CommonAlert.showAlertAction2(vc: self, preferredStyle: .actionSheet, title: "Action Sheet Style", message: "2 Button Action Sheet")
버튼 3개
CommonAlert.showAlertAction3(vc: self, preferredStyle: .actionSheet, title: "Action Sheet Style", message: "3 Button Action Sheet")
👩🏻💻 프로젝트 예제 소스
https://github.com/SuniDev/Alert-UIAlertController
728x90
반응형
'iOS - Swift' 카테고리의 다른 글
[iOS/Swift] iOS13 에서 라이트모드(또는 다크모드)만 지원하기 (turn off darkmode) (0) | 2021.12.29 |
---|---|
[iOS/Swift] Custom Animation Popup 만들기 (with. Storyboard) (0) | 2021.12.29 |
[iOS/Swift] 최상위에 있는 뷰컨트롤러 얻기 (0) | 2021.12.29 |
[iOS/Swift] xib로 TableView 만들기 (TableViewCell Select Highlight) (0) | 2021.12.28 |
[iOS/Swift] Grid형태 Image CollectionView만들기 (0) | 2021.12.24 |
Comments