랭귀지/SWIFT
얼럿 사용해 경고 표시하기 (Alert)
유키공
2018. 1. 8. 13:00
얼럿 사용해 경고 표시하기(Alert)
얼럿(Alert) 이란
주로 사용자에게 중요한 알림이나 경고 메시지를 나타내야 할 때 사용합니다.
경고메시지를 통해 메시지와 함께 두가지 이상의 선택을 요구할수도 있고 선택에 따라 특정 작업도 수행할 수 있습니다.
전구 켜기, 끄기, 제거 버튼을 만들어 전구를 제어하고 선택에 따라 경고 메시지를 나타내어 그에 따른 작업을 수행하는 앱을 만들어보겠습니다.
import UIKit
class ViewController: UIViewController {
let imgOn : UIImage = UIImage(named: "lamp-on.png")!
let imgOff : UIImage = UIImage(named: "lamp-off.png")!
let imgRemove : UIImage = UIImage(named: "lamp-remove.png")!
var isLampOn = true
@IBOutlet weak var lampImg: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//lampImg 객체에 imgOn을 대입합니다.
lampImg.image = imgOn
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func btnLampOn(_ sender: UIButton) {
if(isLampOn==true) {
//전구가 켜져 있을때
//전구가 켜져 있다고 Alert을 실행함
//UIAlertController를 생성 합니다.
let lampOnAlert = UIAlertController(title: "경고", message: "현재 On 상태입니다.", preferredStyle: UIAlertControllerStyle.alert)
//UIAlertAction을 생성 합니다.(특별한 동작을 하지않을 경우에는 handler를 nil로 합니다.)
let onAction = UIAlertAction(title: "네,알겠습니다.", style: UIAlertActionStyle.default, handler: nil)
//생성된 onAction을 얼럿에 추가합니다.
lampOnAlert.addAction(onAction)
//presentViewController 메서드를 실행 합니다.
present(lampOnAlert,animated: true, completion: nil)
}else{
//전구가 켜져 있지 않을 때
//전구를 켬
lampImg.image = imgOn
isLampOn=true
}
}
@IBAction func btnLampOff(_ sender: UIButton) {
if isLampOn {
//전구가 켜져 있을 경우
//전구를 끌 것인지를 묻는 Alert을 실행
//if(isLampOn==true)로 작성해도 무방
//UIAlertController를 생성 합니다.
let lampOffAlert = UIAlertController(title: "램프끄기", message: "램프를 끄시겠습니까?", preferredStyle: UIAlertControllerStyle.alert)
//UIAlertAction을 생성 합니다.전등을 꺼야 하므로 핸들러에 중괄호{,}를 넣어 추가적으로 작업을 합니다.
//반드시 self를 붙여야 에러가 발생하지 않습니다.
let offAction = UIAlertAction(title: "네", style: UIAlertActionStyle.default, handler: {ACTION in self.lampImg.image = self.imgOff
self.isLampOn = false
})
//UIAlertAction을 추가로 생성 합니다.(특별한 동작을 하지않을 경우에는 handler를 nil로 합니다.)
let cancelAction = UIAlertAction(title: "아니오", style: UIAlertActionStyle.default, handler: nil)
//생성된 offAction,cancelAction을 얼럿에 추가 합니다.
lampOffAlert.addAction(offAction)
lampOffAlert.addAction(cancelAction)
//present 메서드를 실행 합니다.
present(lampOffAlert, animated: true, completion: nil)
}
}
@IBAction func btnLampRemove(_ sender: UIButton) {
//UIAlertController를 생성 합니다.
let lampRemoveAlert = UIAlertController(title: "램프제거", message: "램프를 제거하시겠습니까?", preferredStyle: UIAlertControllerStyle.alert)
//UIAlertAction을 생성 합니다.전등을 꺼야 하므로 핸들러에 중괄호{,}를 넣어 추가적으로 작업을 합니다.
let offAction = UIAlertAction(title: "아니오, 끕니다(off).", style: UIAlertActionStyle.default, handler: {ACTION in self.lampImg.image = self.imgOff
self.isLampOn = false
})
//UIAlertAction을 생성 합니다.전등을 켜는 동작을 추가합니다.핸들러에 중괄호{,}를 넣어 추가적으로 작업을 할수있는데,
//이번에는 핸들러 매개변수를 삭제하고뒤쪽에{,}를 넣는 방법을 이용합니다.두 가지 방법 모두 에러없이 동작을 구현합니다.
let onAction = UIAlertAction(title: "아니오, 켭니다(on).", style: UIAlertActionStyle.default) {
ACTION in self.lampImg.image = self.imgOn
self.isLampOn=true
}
//UIAlertAction을 추가로 생성한 후 전구를 제거하는 동작을 추가 합니다.
let removeAction = UIAlertAction(title: "네, 제거합니다", style: UIAlertActionStyle.destructive, handler: {
ACTION in self.lampImg.image = self.imgRemove
self.isLampOn=false
})
//생성된 offAction,onAction,removeAction 을 얼럿에 추가합니다.
lampRemoveAlert.addAction(offAction)
lampRemoveAlert.addAction(onAction)
lampRemoveAlert.addAction(removeAction)
// present 메서드를 실행합니다.
present(lampRemoveAlert, animated: true, completion: nil)
}
}
클로저(Closure) (80~81 라인)
{
ACTION in self.lampImg.image = self.imgRemove
self.isLampOn=false
}