투케이2K

344. (ios/swift5) [유틸 파일] observableTime : 시간 선택 팝업창 호출 및 콜백 이벤트 확인 - UIDatePicker Time 본문

IOS

344. (ios/swift5) [유틸 파일] observableTime : 시간 선택 팝업창 호출 및 콜백 이벤트 확인 - UIDatePicker Time

투케이2K 2023. 10. 9. 16:44

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // MARK: - [시간 선택 팝업창 호출 및 콜백 이벤트 확인]
    // -----------------------------------------------------------------------------------------
    func observableTime(okBtn:String, noBtn:String, completion: @escaping (Bool, String)->()) {
        
        /*
        // -----------------------------------------
        [observableTime 메소드 설명]
        // -----------------------------------------
        1. 시간 선택 팝업창 호출 및 콜백 이벤트 확인
        // -----------------------------------------
        2. 호출 방법 :
         
         self.observableTime(okBtn:"확인", noBtn: "취소"){(result) in
             
             S_Log._D_(description: "시간 선택 콜백 결과 확인", data: ["\(result)"])
             
         }
         
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            S_Log._D_(description: "시간 선택 팝업창 호출 수행 실시", data: nil)
            
            
            // [UIAlertController 생성]
            let alert = UIAlertController(
                title: "\n\n\n\n\n\n\n\n\n\n\n",
                message: "",
                preferredStyle: .actionSheet
            )
            
            
            // [UIDatePicker 생성]
            let x_  = (self.view.frame.height/100) * 3
            
            let rect = CGRect(x: x_, y: 20, width: self.view.frame.width, height: self.view.frame.height) // 크기
            
            let datePicker = UIDatePicker(frame: rect)
            datePicker.datePickerMode = .time
            if #available(iOS 13.4, *) {
                datePicker.preferredDatePickerStyle = .wheels
            }
            datePicker.locale = NSLocale(localeIdentifier: "ko_KO") as Locale
            
            
            // [뷰 추가 실시]
            alert.view.addSubview(datePicker)
            
            
            // [확인 버튼 등록 실시]
            if C_Util().stringNotNull(str: okBtn) == true {
                let okAction = UIAlertAction(title: okBtn, style: .default) { (action) in
                    
                    // [선택한 날짜 확인]
                    let formatter = DateFormatter()
                    formatter.dateFormat = "HH:mm:ss"

                    var strDate = formatter.string(from: datePicker.date)
                    
                    S_Log._D_(description: "시간 선택 팝업창 확인 클릭 결과 확인", data: [
                        "strDate :: \(strDate)"
                    ])
                    
                    // [콜백 반환]
                    completion(true, strDate)
                    
                    // [취소 버튼 클릭 이벤트 내용 정의 실시]
                    return
                }
                // [버튼 클릭 이벤트 객체 연결]
                alert.addAction(okAction)
            }
            
            
            // [취소 버튼 등록 실시]
            if C_Util().stringNotNull(str: noBtn) == true {
                let noAction = UIAlertAction(title: noBtn, style: .cancel) { (action) in
                    
                    // [콜백 반환]
                    completion(false, "")
                    
                    // [취소 버튼 클릭 이벤트 내용 정의 실시]
                    return
                }
                // [버튼 클릭 이벤트 객체 연결]
                alert.addAction(noAction)
            }
            
            
            // [alert 팝업창 활성 실시]
            self.present(alert, animated: false, completion: nil)
            
        }
    }
 

[결과 출력]


 

반응형
Comments