[2022-08-06 🥴 TIL]

Burkey·2022년 8월 6일
0

TIL

목록 보기
4/157
import UIKit

class ViewController: UIViewController {
    let timeSelector : Selector = #selector(ViewController.updateTime)
    let interval = 1.0
    var count = 0
    var isAlarm = false
    var currnetTime : String = "" , change : String = ""
    @IBOutlet var lb1currentTime: UILabel!
    @IBOutlet var lb1changeTime: UILabel!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        Timer.scheduledTimer(timeInterval: interval, target: self, selector: timeSelector, userInfo: nil, repeats: true)
        
        
    }
    
    @objc func updateTime(){
        
        let date = NSDate()
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm"
        lb1currentTime.text = "현재시간 : " + formatter.string(from: date as Date)
        
       
    }

    @IBAction func dateChange(_ sender: UIDatePicker) {
        let datePicker = sender
        let date = NSDate()

        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm"
        change = formatter.string(from: datePicker.date)
        currnetTime = formatter.string(from: date as Date)
        
        lb1changeTime.text = "선택시간 : " + formatter.string(from: datePicker.date)
        
        if currnetTime == change {
            isAlarm = true
        }
        
        if isAlarm == true {
            let alarmAlert = UIAlertController(title: "알람", message: "알어날 시간", preferredStyle: UIAlertController.Style.alert)
            let alertAction = UIAlertAction(title: "끄기", style: UIAlertAction.Style.default) {
                ACTION in self.isAlarm = false
            }
            
            alarmAlert.addAction(alertAction)
            present(alarmAlert, animated: true, completion: nil)
        }

    }
    
}

DatePicker를 사용하여 선택한 시간이 현재시간과 일치하면 Alert을 띄우는 예제 입니다.

updateTime함수 안에서 Alert을 선언하니 Alert을 꺼도 Timer.scheduledTimer 함수 때문에 1초마다 새로 갱신되어 Alert이 현재시간에 일치하지 않아질 째까지 꺼지지않는 문제가 발생하였습니다.

이를 해결하기 위하여 updateTime 함수가 아니라 dateChange함수 안에 선언하여 datePicker가 변경되었을때 한번만 Alert이 실행이 되도록 변경하였습니다.

profile
스탯 올리는 중

0개의 댓글