티스토리 뷰

안녕하세요.

 

이번엔 간단한 기본 기능이지만 많이 쓰이는 알림창을 알아볼까합니다. 

 

사실 방법 자체는 어려운게 아닌데 자주 까먹게 되더라고요. 

 

일단 알림창이 뭔지 모르시는 분들을 위하여 

 

사진부터 보여드리면 

 

이렇게 생긴 창을 의미합니다.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.alertAction()
    }
    func alertAction(){
        let alert = UIAlertController(title: "안녕하세요", message: "반가워요", preferredStyle: UIAlertController.Style.alert)
        let okAction = UIAlertAction(title: "확인", style: .default, handler: nil)
        alert.addAction(okAction)
        self.present(alert, animated: true, completion: nil)
    }
}

코드도 굉장히 간단하죠?

 

다만 이때 혹시 

whose view is not in the window hierarchy.

위와 같은 오류가 뜨면서 안보이시는 분들은 함수위치를 위 코드처럼 옮겨주시면 됩니다.

(view 가 다 만들어지지도 않았는데 호출해서 뜨는 에러입니다.위치를 옮겨주시면 간단히 해결가능합니다.)

 

이 알림창을 사용하는 방법은 굉장히 다양합니다만

패턴에 익숙해지시면 다양하게 활용이 가능합니다.

 

몇가지 사용법을 간단하게 알려드릴께요. 

 

일단 위처럼 아무런 기능없이 쓰는 방법도 있고요.

 

1. 사용자가 버튼을 누르면 무언가를 하게 하고 싶어요!

사용자가 버튼을 누르면 무언가를 하게하고 싶다! 하시는 분들은 

    func alertAction(){
        let alert = UIAlertController(title: "안녕하세요", message: "민트 좋아하세요?", preferredStyle: UIAlertController.Style.alert)
        let okAction = UIAlertAction(title: "네", style: .default){_ in
            // 여기에 원하시는 거 넣으시면 됩니다.
            self.view.backgroundColor = .systemMint
        }
        let cancelAction = UIAlertAction(title: "아니오", style: .cancel)
        alert.addAction(okAction)// 확인 버튼 추가
        alert.addAction(cancelAction)// 취소 버튼 추가
        self.present(alert, animated: true, completion: nil)
    }

이렇게 넣어주시면 

"네"를 누르면 배경색이 바뀌게 넣은 경우입니다.

2. 저는 취소버튼 말고 다른 버튼이 글씨가 두꺼웠으면 좋겠어요.

근데 저기에서 특정 버튼을 강조(글씨체가 두껍게 나오는 효과)하고 싶으시면 위 코드에 아래 한 줄만 추가해주시면 됩니다.

alert.preferredAction = okAction // 강조하고 싶은 버튼을 넣어주시면 됩니다.

강조 포인트가 "네"에 적용된 모습입니다.

3. 저는 파란색말고 다른색으로 버튼을 만들고싶어요.

자꾸 파란색으로 나오는게 신경쓰이는 분들은 이렇게 바꿀 수 있습니다.

okAction.setValue(UIColor(named: "teal_green_300"), forKey: "titleTextColor") //원하시는 색상을
cancelAction.setValue(UIColor(named: "teal_green_300"), forKey: "titleTextColor") //원하시는 버튼에 넣으면 됩니다.

알록달록한 버튼 완성입니다.

4. 저는 좀더 많은 선택지를 만들어서 사용자가 선택하게 하고 싶어요.

보통 2개 중 하나를 선택하는 경우에는 위와 같은 형식을 많이 쓰지만 그게 아니라 3~4개 정도 선택을 만들고 싶은 분들은 모양을 조금 바꾸시는 걸 추천드립니다. 생김새가 달라서 코드도 다를것같지만 거의 똑같습니다. 

func alertChooseAction(){
        let alert = UIAlertController(title: "안녕하세요", message: "민트 좋아하세요?", preferredStyle: UIAlertController.Style.actionSheet)
        let yesAction = UIAlertAction(title: "네", style: .default){_ in
            // 여기에 원하시는 거 넣으시면 됩니다.
            self.view.backgroundColor = .systemMint
        }
        let sosoAction = UIAlertAction(title: "그냥그래요", style: .default){_ in
            // 여기에 원하시는 거 넣으시면 됩니다.
            self.view.backgroundColor = .systemYellow
        }
        let nopeAction = UIAlertAction(title: "아니요", style: .default){_ in
            // 여기에 원하시는 거 넣으시면 됩니다.
            self.view.backgroundColor = .systemRed
        }
        let cancelAction = UIAlertAction(title: "선택취소", style: .cancel)
        alert.addAction(yesAction)
        alert.addAction(sosoAction)
        alert.addAction(nopeAction)
        alert.addAction(cancelAction)
        self.present(alert, animated: true, completion: nil)
    }

보통 언어선택이나 이런거 할때 많이 씁니다.

어디가 다른지 찾는 분들을 위하여 다른 부분만 잘라보면 기본 UIAlertController 의 style 이 다르다는걸 알 수 있습니다.

let alert = UIAlertController(title: "안녕하세요", message: "민트 좋아하세요?", preferredStyle: UIAlertController.Style.actionSheet)
// 맨뒤 스타일만 다르시다는걸 알수있습니다.

생각보다 간단하죠?

 

이 기능은 생각보다 자주 쓰는 기능이라 정리해서 올려봅니다. 

 

누군가에게 도움이 되었으면 좋겠네요.

 

오늘도 파이팅입니다!

댓글