Alert 앱에 아웃렛 변수와 액션 함수 추가하기
Posted on 2021-09-04 by GKSRUDTN99
Swift&Xcode
Xcode
Alert
Image View와 Button의 아웃렛 변수 및 액션함수 추가하기
1. Assistant를 열어 Image View에 대한 아웃렛 변수를 추가한다.
- Connection: Outlet
- Name: lampImg
- Type: UIImageView
2. 켜기 Button에 액션 함수 추가하기
- Connection: Action
- Name: btnLampOn
- Type: UIButton
3. 끄기 Button에 대한 액션 함수 추가하기
- Connection: Action
- Name: btnLampOff
- Type: UIButton
4. 제거 Button에 대한 액션 함수 추가하기
- Connection: Action
- Name: btnLampRemove
- Type: UIButton
//
// ViewController.swift
// Alert
//
// Created by 한경수 on 2021/09/04.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet var lampImg: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func btnLampOn(_ sender: UIButton) {
}
@IBAction func btnLampOff(_ sender: UIButton) {
}
@IBAction func btnLampRemove(_ sender: UIButton) {
}
}
전구 켜기를 코드로 구현하기
1. ViewController.swift를 열고 코딩에 필요한 상수들과 변수들을 클래스 내에 선언한다.
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
// (... 생략 ...)
2. 이미지 보여주기
- 앱을 처음 시작할 때 전구가 켜저 있는 이미지를 보여주기 위해 viewDidLoad 함수 내에서 lampImg 객체에 imgOn을 대입한다.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
lampImg.image = imgOn
}
3. 켜기 Button 클릭 시 동작하는 함수 코딩하기
@IBAction func btnLampOn(_ sender: UIButton) {
if(isLampOn == true){
// UIAlertController 생성
let lampOnAlert = UIAlertController(title: "경고", message: "현재 On 상태입니다", preferredStyle: UIAlertController.Style.alert)
// UIAlertAction 생성(특별한 동작이 없으므로, handler는 nil로 설정)
let onAction = UIAlertAction(title: "네, 알겠습니다.", style: UIAlertAction.Style.default, handler: nil)
// 생성된 onAction은 Alert에 추가
lampOnAlert.addAction(onAction)
// present 메서드 실행
present(lampOnAlert, animated: true, completion: nil)
}
else{
lampImg.image = imgOn
isLampOn = true
}
}
- present 함수는 다음 세 가지 파라미터를 받아 실행되는 함수이다.
- viewControllerToPresent : 나타낼 UIViewController 객체를 전달한다.
- flag : animation 효과를 사용할 것인지 Bool 값을 전달한다.
- completion : present가 끝난 후, 실행할 함수나 클로저를 전달한다.
4. 끄기 Button 클릭 시 동작하는 함수 코딩하기
@IBAction func btnLampOff(_ sender: UIButton) {
if isLampOn {
let lampOffAlert = UIAlertController(title: "램프 끄기", message: "램프를 끄시겠습니까?", preferredStyle: UIAlertController.Style.alert)
let OffAction = UIAlertAction(title: "네", style: UIAlertAction.Style.default, handler: {
ACTION in self.lampImg.image = self.imgOff
self.isLampOn = false
})
let cancelAction = UIAlertAction(title: "아니오", style: UIAlertAction.Style.default, handler: nil)
lampOffAlert.addAction(OffAction)
lampOffAlert.addAction(cancelAction)
present(lampOffAlert, animated: true, completion: nil)
}
}
- OffAction을 정의할 때, 익명 함수를 사용한 것을 확인할 수 있다.
ACTION in
self.lampImg.image = self.imgOff
self.isLampOn = false
- 위 형태는 파라미터 타입과 리턴 타입을 생략한 익명함수의 한 형태이다.
- ACTION 이라는 매개변수를 받아 아래 두 줄을 실행한다.
5. 전구 제거 Button 코드 추가하기
@IBAction func btnLampRemove(_ sender: UIButton) {
let lampRemoveAlert = UIAlertController(title: "램프 제거", message: "램프를 제거하시겠습니까?", preferredStyle: UIAlertController.Style.alert)
let offAction = UIAlertAction(title: "아니오, 끕니다", style: UIAlertAction.Style.default, handler: {
ACTION in
self.lampImg.image = self.imgOff
self.isLampOn = false
})
let onAction = UIAlertAction(title: "아니오, 켭니다", style: UIAlertAction.Style.default, handler: {
ACTION in
self.lampImg.image = self.imgOn
self.isLampOn = true
})
let removeAction = UIAlertAction(title: "네, 제거합니다", style: UIAlertAction.Style.destructive, handler: {
ACTION in
self.lampImg.image = self.imgRemove
self.isLampOn = false
})
lampRemoveAlert.addAction(offAction)
lampRemoveAlert.addAction(onAction)
lampRemoveAlert.addAction(removeAction)
present(lampRemoveAlert, animated: true, completion: nil)
}