Archive/Doit 아이폰 앱(입문)

Alert - 코드리뷰

lgvv 2021. 3. 2. 12:42

Alert.zip
1.85MB

 

 

//
//  ViewController.swift
//  Alert
//
//  Created by Hamlit Jason on 2021/02/21.
//

import UIKit

class ViewController: UIViewController {

    let imgOn = UIImage(named: "lamp-on.png")
    let imgOff = UIImage(named: "lamp-off.png")
    let imgRemove = UIImage(named: "lamp-Remove.png")
    
    var isLampOn = true
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        lambImg.image = imgOn
    }

    @IBOutlet var lambImg: UIImageView!
    
    @IBAction func lambOn(_ sender: UIButton) {
        if (isLampOn == true) {
            let lampOnAlert = UIAlertController(title: "경고", message: "현재 on 상태입니다.", preferredStyle: .alert)
            let onAction = UIAlertAction(title: "네 알겠습니다.", style: UIAlertAction.Style.default, handler: nil)
            lampOnAlert.addAction(onAction)
            present(lampOnAlert, animated: true, completion: nil)
        } else {
            lambImg.image = imgOn
            isLampOn = true
        }
    }
    
    @IBAction func lambOff(_ sender: UIButton) {
        if (isLampOn == true) {
            let lampOnAlert = UIAlertController(title: "램프 끄기", message: "전구를 끄시겠습니까?", preferredStyle: .alert)
            let offAction = UIAlertAction(title: "네 알겠습니다.", style: UIAlertAction.Style.default, handler : { ACTION in
                self.lambImg.image = self.imgOff
                self.isLampOn = false
            })
                
            
            let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel, handler: nil)
            
            lampOnAlert.addAction(offAction)
            lampOnAlert.addAction(cancelAction)
            present(lampOnAlert, animated: true, completion: nil)
            
            
            
        } else {
            let lampOffAlert = UIAlertController(title: "경고", message: "현재 off 상태입니다.", preferredStyle: .alert)
            let offAction = UIAlertAction(title: "네 알겠습니다.", style: UIAlertAction.Style.default, handler: nil)
            lampOffAlert.addAction(offAction)
            present(lampOffAlert, animated: true, completion: nil)
            
        }
    }
    
    @IBAction func LampRemove(_ sender: UIButton) {
        let lampRemoveAlert = UIAlertController(title: "경고", message: "램프를 정말 제거하시겠습니까?.", preferredStyle: .alert)
        
        let onAction = UIAlertAction(title: "킬래요.", style: UIAlertAction.Style.default, handler: { (UIAlertAction) in
            self.lambImg.image = self.imgOn
            self.isLampOn = true
        })
        
        let offAction = UIAlertAction(title: "끌래요.", style: UIAlertAction.Style.default, handler: { (UIAlertAction) in
            self.lambImg.image = self.imgOff
            self.isLampOn = false
        })
        
        let RemoveAction = UIAlertAction(title: "삭제할래요.", style: UIAlertAction.Style.default, handler: { (UIAlertAction) in
            self.lambImg.image = self.imgRemove
            self.isLampOn = false
        })
        
        
        lampRemoveAlert.addAction(onAction)
        lampRemoveAlert.addAction(offAction)
        lampRemoveAlert.addAction(RemoveAction)
        present(lampRemoveAlert, animated: true, completion: nil)
    }
}

 

 

alert 사용법은 

1. UIAlertController 선언

2. UIAlertAction 선언

3. addAction 통해서 추가

4. present 를 통해서 alert를 보여준다 ( dismiss는 구현할 필요가 없는데, 그 이유는 창이 닫힐때 자동으로 닫히기 때문에 )

 

파라미터에 대한 간략한 이해

UIAlertController - preferredStyle에서 

.action 과 .alert의 차이는

후자는 모달 방식으로 화면에 표시되서 그 창이 닫힐 때 까지 다른 반응을 할 수 없도록 잠기는 것

전자는 다른 영역을 건드릴 수 있으며, 그 결과로 시트창이 닫힙니다.

 

UIAlertAction - style에서

.destructive - 주의해서 선택해야 할 버튼에 주로 사용하며, 중요한 정보 삭제나 돌이킬 수 없는 중요한 내용을 변경하거나 삭제해서 되돌릴 수 버튼의 경우 빨간색 글자로 표시된다.

.cancel - 아무것도 지정하지 않은 채 창의 액션이 취소된다는 것이며, 메시지 창 내에서는 한번만 사용할 수 있다.

.default - 일반적인 버튼이 이 값으로 설정한다.

 

UIAlertAction - handler의 역할은

버튼을 클릭했을 때 실행될 구문이다. 

딱히 기능이 없으면 nil 로 설정하면 된다.

 

 

 

'Archive > Doit 아이폰 앱(입문)' 카테고리의 다른 글

Map - 코드리뷰(맵뷰)  (0) 2021.03.02
Web - 코드리뷰(웹뷰)  (0) 2021.03.02
PickerView - 코드리뷰  (0) 2021.03.02
DatePicker - 코드리뷰 (타이머)  (0) 2021.03.02
ImageView - 코드리뷰  (0) 2021.03.02