[iOS] 알림창 만들기

Make Alert iOS Sample

Posted by JungHoon-Park on May 20, 2019

Sample : iOS Alert


iOS 알림창 만들기

1. alert 창컨트롤러 인스턴스를 생성한다

2. alert 창 컨트롤러에 들어갈 버튼 액션 객체를 생성

3. 액션 추가후 컨트롤러를 표시해준다


소스코드

1. alert 창컨트롤러 인스턴스를 생성한다.

1
2
3
let alert = UIAlertController(title: "선택",
                    message: "항목을 선택해주세요",
                    preferredStyle: .actionSheet)// .alert / .actionSheet 스타일

2. alert 창 컨트롤러에 들어갈 버튼 액션 객체를 생성

1
2
3
4
5
// .cancel style 로 지정한 버튼은 순서에 상관없이 항상 맨아래 위치함
let cancel = UIAlertAction(title: "취소", style: .cancel){ (_)in self.resultlabel.text = "취소 버튼 클릭"}
let ok = UIAlertAction(title: "확인", style: .default){ (_)in self.resultlabel.text = "확인 버튼 클릭"}
let exec = UIAlertAction(title: "실행", style: .destructive){ (_)in self.resultlabel.text = "실행 버튼 클릭"}
let stop = UIAlertAction(title: "중지", style: .default){ (_)in self.resultlabel.text = "중지 버튼 클릭"}

3. 액션 추가후 컨트롤러를 표시해준다

1
2
3
4
5
alert.addAction(cancel)
alert.addAction(ok)
alert.addAction(exec)
alert.addAction(stop)
self.present(alert, animated: false)
  • 화면이 뜨자마자 자동으로 alert 띄워야할때 (viewDidLoad()가 아닌 viewDidAppear()에 구현해주어야한다)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    override func viewDidAppear(_ animated: Bool) {
      //뷰가 완전히 화면에 표현되고 난 뒤 알람띄우기
      let alert_start = UIAlertController(title: "앱 시작 알림", message: "뷰가 완전히 표현됨", preferredStyle: .alert)
            
      let ok = UIAlertAction(title: "확인", style: .default, handler: nil)
      let cancel = UIAlertAction(title: "취소", style: .cancel, handler: nil)
            
      alert_start.addAction(ok)
      alert_start.addAction(cancel)
      self.present(alert_start,animated: false)
     }
    
  • alert 창에 텍스트필드 추가하여 처리하기
    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
    
    @IBAction func auth(_ sender: Any) {
      let msg = "로그인"
      let alert = UIAlertController(title: nil, message: msg, preferredStyle: .alert)
      let cancel = UIAlertAction(title: "취소", style: .cancel)
      let ok = UIAlertAction(title: "확인", style: .default){ (_) in
          //클로저 구문을 이용해 확인버튼 눌렀을때 처리
          let loginid = alert.textFields?[0].text
          let loginpw = alert.textFields?[1].text
                
          if loginid == "admin" && loginpw == "1234"{
              self.resultlabel.text = "인증완료"
          }else{
              self.resultlabel.text = "인증실패"
          }
      }
            
      alert.addAction(ok)
      alert.addAction(cancel)
            
      //텍스트 필드 추가
      alert.addTextField(configurationHandler: {(tf) in
          tf.placeholder = "아이디"
          tf.isSecureTextEntry = false
      })
      alert.addTextField(configurationHandler: {(tf) in
          tf.placeholder = "비밀번호"
          tf.isSecureTextEntry = true
      })
            
      self.present(alert,animated: false)
    }
    

여러가지 클로저 표현 형식

[원형]

1
2
3
4
alert.addTextField(configurationHandler: {(textfield : UITextField) in
        textfield.placeholder = "비밀번호"
        textfield.isSecureTextEntry = true
    })

[변형1] 클로저 인자값 대신 메소드에 실행 블록 추가

1
2
3
4
alert.addTextField(){(textfield:UITextField) in
    textfield.placeholder = "비밀번호"
    textfield.isSecureTextEntry = true
}

[변형2] 클로저 인자값의 타입 생략

1
2
3
4
alert.addTextField() {(tf) in
    tf.placeholder = "비밀번호"
    tf.isSecureTextEntry = true
}

[변형3] 클로저 인자값을 생략

1
2
3
alert.addTextField() { $0.placeholder = "비밀번호"
    $0.isSecureTextEntry = true
}

소스코드링크(github)