Patrick's 데이터 세상

iOS - 다이얼로그와 피커 본문

Programming/Swift

iOS - 다이얼로그와 피커

patrick610 2020. 6. 23. 00:37
반응형
SMALL

다이얼로그


   사용자의 의사 결정 필요
   모달(다른 입력 못함)로 동작
   얼럿 컨트롤러 : UIAlertController



   얼럿 컨트롤러 (UIAlertController)

      IB로 사용 불가, 코드로 작성

   얼럿 컨트롤러의 스타일

      AlertView 스타일 : 팝업 형식
      ActionSheet 스타일 : 하단에서 올라오는 방식


   뷰 컨트롤러(UIViewController)의 모달 전환 메소드

func present(_ viewControllerToPresent: UIViewController,
     animated flag: Bool,
     completion: (() -> Swift.Void)? = nil)



   얼럿 컨트롤러 생성과 출력 예제

let dialog = UIAlertController(title: "제목", message: "내용",
    preferredStyle:.alert)
self.present(dialog, animated: true, completion: nil)

// completion : default value parameter, 생략 가능
self.present(dialog, animated: true)

 

   사용자 선택 동작

      얼럿 액션 등록 : UIAlertController

func addAction(_ action: UIAlertAction)
var actions: [UIAlertAction] { get }


      예제 코드

let cancelAction = UIAlertAction(title : "취소", style: .cancel) {
    (action) -> Void in
    print("취소 선택")
}
dialog.addAction(cancelAction)



   
   글자 입력 가능 다이얼로그


      얼럿 컨트롤러에 텍스트 필드 사용

         얼럿뷰 스타일에 텍스트 필드 사용
         ActionSheetStyle에는 텍스트 필드 사용 불가
         사용자가 확인을 선택하면 입력값 사용


      얼럿 컨트롤러에 텍스트 필드 설정

         텍스트 필드 설정 API
         configurationHandler : 텍스트 필드 설정, 없으면 기본

         숫자 키보드 사용 설정 예

dialog.addTextField { (textField : UITextField) -> Void in
   // 숫자 입력
   textField.keyboardType = UIKeyboardType.NumberPad
}


      얼럿 컨트롤러의 텍스트 필드 접근

         텍스트 필드 접근하기
         확인 선택 시 입력값 접근 코드

let okAction = UIAlertAction(title: "확인", style:.default) { (action) -> Void in
   if let userInput = dialog.textFields?[0].text {
      print("사용자 입력 \(userInput.text)")
   }
}
dialog.addAction(okAction)


      
      다이얼로그에 접근

// 모달 뷰 컨트롤러 접근
let dialog = self.presentedViewController

// 코드로 다이얼로그 닫기
dialog.dismiss(animated: true, completion: nil)

   

 

델리게이트 패턴


   행위를 위임
   객체의 이벤트를 다른 객체에게 위임
   카메라로 촬영 이후 동작 위임
   화면에 출력되는 크기 결정 위임


   위임하기

protocol ActionDelegate {
   func handleDone()
}

class Action {
   var delegate : ActionDelegate!
   
   func actionDone() {
      // 동작 완료 - 위임
      delegate.handleDone()
   }
}


   위임받아 처리하기

class MyApp : ActionDelegate {
   // 델리게이트 프로토콜에 선언한 메소드
   func handleDone() {
      print("위임 완료")
   }
   
   func dolt() {
      let action = Action()
      action.delegate = self
   }
}

 

 

피커


   피커 : 선택하는 행위

   데이트 피커
   이미지 피커
   미디어 피커
   피커 뷰 : 제공된 항목 중 선택


   
   피커뷰의 특징

   클래스 : UIPickerView
   비슷한 뷰로 데이트 피커
   사용자에게 선택 항목 출력
   선택 항목 중에서 사용자가 선택
   피커뷰 속성 : 선택 항목 표시 인디케이터


   피커뷰 구성 요소

   컴포넌트 : 그룹
   로우 : 행
   컴포넌트 내 로우


   데이터 소스, 델리게이트를 활용하여 로우에 데이터를 넣을 수 있다.



   피커뷰 데이터 소스

      UIPickerViewDataSource 프로토콜

// 컴포넌트 개수
func numberOfComponents(in pickerView: UIPickerView) -> Int

// 각 컴포넌트 내 항목 개수
func pickerView(_ pickerView: UIPickerView,
     numberOfOrwsInComponent component: Int) -> Int


      
데이터 소스 메소드 호출 : 피커뷰
      메소드에서 return 된 값 : 피커뷰로 전달


   
   변경된 데이터 반영하기

      피커뷰의 리로드(reload) 메소드

func reloadAllComponents()
func reloadComponent(_ component: Int)

 

   



 

반응형
LIST

'Programming > Swift' 카테고리의 다른 글

iOS - 목록형 씬  (0) 2020.06.24
iOS - 스크롤 뷰  (0) 2020.06.23
iOS - 글자 입력 컨트롤  (0) 2020.06.23
iOS - 인터렉티브 씬  (0) 2020.06.23
iOS - 스택뷰, 적응형 UI  (0) 2020.06.23
Comments