도서 '꼼꼼한 재은 씨의 스위프트: 기본편'을 공부하면서 정리한 내용입니다.
전체 목록은 여기에서 볼 수 있습니다.

사용자에게 메시지를 전달하는 방법은 여러가지가 있다.

  • 앱이 실행 중일 때만 동작
    • 메시지창(알림창)
  • 앱이 실행 중이지 않아도 동작
    • Local Push
    • Server Push

오늘은 이중에서 앱이 실행 중일 때만 동작하는 알림인 UIAlertController에 대해 알아보자.

💡 메시지 알림창 - UIAlertController


  • UIAlertController
    • 알림창
      • Modal 방식 (창이 닫힐 때까지 그 창을 제외한 화면의 다른 부분은 반응할 수 없도록 잠기는 것)
      • 버튼이 하나 또는 두개일 경우 가로로 표시되고 세 개 이상부터는 목록처럼 구성
    • 액션 시트
      • Modal 방식이 아님
      • 버튼을 무조건 목록처럼 배열 (위아래로)

tableselection-0.jpg
UIAlertController.style: .actionSheet, .alert

alert, actionSheet 스타일

소스코드

import UIKit

// 메시지 창 컨트롤러 인스턴스를 생성
let alert = UIAlertController(title: "title", message: "message", preferredStyle: UIAlertController.Style.alert)    
    //style 종류: alert, actionSheet

// 메시지 창 컨트롤러에 들어갈 버튼 액션 객체를 생성
let cancel = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel)
    // style 종류: .default, .cancel-가장 마지막에 위치, .destructive(파괴적인)-빨간색으로 강조됨
    // handler : 
        // 세번째 매개변수 이지만 생략되었다.(cancel 버튼처럼 누르면 창을 닫는 경우)
        // 버튼을 클릭했을 때 실행될 구문을 인자로 받는다.(함수 또는 클로저)

// 메시지 창 컨트롤러에 버튼 액션을 추가
alert.addAction(cancel)
    // UIAlertAction 클래스로부터 생성한 인스턴스를 UIAlertController 클래스로부터 생성한 인스턴스에 등록

//메시지 창 컨트롤러를 표시
self.present(alert, animated: false)

실행결과

BD60A9AC-B5DA-40B0-B835-1486605FAF92.jpg

.addTextField 속성 추가

alert 인스턴스에 텍스트 필드를 추가할 때에는 addTextField(configurationHandler:)메소드를 호출하면 된다. 인자값으로 클로저가 사용되며, 클로저의 목적은 텍스트 필드의 속성을 설정하는 것이다.

소스코드

@IBAction func login(_ sender: Any)
  ...
  alert.addTextField(configurationHandler: { (tf) in 
    tf.placeholder = "passworld"    // 안내 메시지
    tf.isSecureTextEntry = true    // 비밀번호 처리
  })
  self.present(alert, animated: false)

실행결과

3E220DFE-C988-4C83-9BBE-880835C11AC5.jpg