ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 활용 - 8) 커스텀 델리게이트 패턴의 활용
    카테고리 없음 2023. 3. 3. 13:19

    <프로필 편집/등록 화면>

    1) 커스텀 델리게이트

    2) 사진 가져오기 (피커 뷰)

    3) Notification - 키보드가 올라가거나 내려가면 알림을 받아서, 전체 화면을 살짝 올라오도록/내려가도록

      애니메이션처럼 구현

     

     

    ** userInfo를 가지고 있는 모델 구조체

    Lazy var 지연저장속성을 선언하면 나중에 메모리가 생김.

    굳이 이미지가 없다면 메모리를 올릴 필요가 없으므로 Lazy var로 선언 (메모리 낭비 방지)

    옵셔널 타입을 통해, 이름이 nil이라면  단순 기본 이미지 return하도록 설정

     

    ** MemberListManager - 관리자 역할. 데이터 배열을 VC에 전달하는 등 비즈니스 로직을 관리

    VC에서 makeMembersListDatas 함수를 호출해줘야 데이터가 생성되고, 생성된 데이터를 membersList 배열에 담아주는 형태

    처음부터 배열에 멤버가 들어있지 않으므로, 한번은 호출해줘야 배열에 멤버(데이터)가 생성됨

     

        참고) UI적인 내용

       1. UITableViewCell 생성후  tableView에서 호출 시 기본적으로 override init(style: , reuseIdentifier: ~) 사용

      2.  오토레이아웃 정하는 정확한 시점은 updateContraints임

    3. layoutSubview를 구현하는 이유 

      - 프로필사진 imageView의 경우 완벽하게 동그란 형태로 그리기 위해서는  cornerRadious = 넓이의 반을 알아야함.

    이때 넓이 (frame.width)가 정확하게 결정되는 시점이 layoutSubview 이후임..

    -> 자세한 건 view의 Drawing Cycle 강의 내용 참고

     

     

    ** didSet을 사용하는 패턴

    cell의 imagView, textLable 등에 값을 표기할때 

    기존 방법 )  cellForRowAt에서 하나씩 호출해서 표기

     

    didSet 사용 )

    cell의 member속성에 didSet을 걸었으므로  멤버 데이터를 전달하기만 하면

    cell 에서 알아서 꺼내서 이미지/레이블 등을 표시함..

     


     

    < detailVC 구현 (프로필 편집 화면)  / 유저 추가, 업데이트 로직 구성 >

    - MVC 패턴을 위해 detailVC 위에 개별 view를 올려서 교체하는 형태

    loadView 를 오버라이딩 해서 view를 올리기

     

    - 키보드가 올라가고 내려갔을 때 뷰의 오토레이아웃을 변경하기 위한 속성 선언

    - 키보드 올라오는 순간의 notification에  observer 등록  >>  selector에 메소드 실행

    * 주의할점: 옵저버를 등록한 후 사라지지 않을 수 있기 때문에 소멸자 (deinit) 호출하여 notification을 없애야 함

      참고) touchsBegan  >  self.endEditing(true)를 사용해서 빈 화면 클릭 시 키보드 내려가도록 설정 

     

     

    - didSet구현하여 imageView,  textField에 값 셋팅

    detailView.member = Member()

     

    -   ** delegate 방식 ** 을 구현하여 업데이트 된 내용을 이전 화면에 전달해주기

    1)  구조체에 프로토콜 생성, detailVC에서 채택 후 구현 

    2) 대리자 지정

    3)  대리자 호출 > 함수 호출  (대리자에게 데이터 전달)

     

     

     


    < 제스처, PickerView 만들기>

    ** 사진첩에서 프로필 사진 선택하기

    - PHPickerViewController 활용 (delegate, datasource 채택)

     

    ** gesture를 구현하여 touch동작이 안되는 imageView에 터치가 가능토록 함

     

     

     참고)  delegate 패턴 vs Notification

     

    댓글

Designed by Tistory.