[iOS] Custom Alert
UIAlertController로 바뀐 후, 알림창을 어떻게 바꿀 수 있을까 해서 테스트를 해보았습니다.
import UIKit
class CustomAlertViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let alertBtn = UIButton(type: .system)
alertBtn.frame = CGRect(x: 0, y: 100, width: 150, height: 30)
alertBtn.setTitle("show alert", for: .normal)
alertBtn.addTarget(self, action: #selector(shwoAlert(_:)), for: .touchUpInside)
alertBtn.center.x = self.view.frame.width / 2
self.view.addSubview(alertBtn)
}
@objc func shwoAlert(_ sender: Any) {
let alert = UIAlertController(title: nil, message: nil, preferredStyle: .alert)
alert.setValue(creatCustomVC(), forKey: "contentViewController")
self.present(alert, animated: false)
}
func creatCustomVC() -> UIViewController {
let customVC = UIViewController()
let containerView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
customVC.view = containerView
customVC.preferredContentSize.width = self.view.frame.width
customVC.preferredContentSize.height = self.view.frame.height
containerView.backgroundColor = UIColor.red
return customVC
}
}
위 소스를 보시면
버튼을 추가 해서 버튼을 누르면 알림창이 뜨도록 만들었습니다.
커스텀 하게 만들기 위해 가장 중요한 부분이
alert.setValue(creatCustomVC(), forKey: "contentViewController")
이 부분 입니다.
Custom한 UIViewController를 넣을 수 있으니깐요.
결과 화면이 아래와 같습니다,.
라운딩된 코너는 수정이 힘들어 보입니다.
애플에서도 이 부분에 대해서는 커스텀하게 하지 말라는 문구도 있었구요.
https://stackoverflow.com/a/32320905
그래도 어느 정도 커스텀하게 표현을 할 수 있을 것 같네요.
참고하세요~