[iOS]<MemoApp> 편집 취소 확인

RudinP·2023년 11월 23일
0

Study

목록 보기
120/227

편집 취소 확인

  • 편집을 취소했을때 실제로 취소할것인지 확인하는 기능 추가

현재 문제점

  • 풀 스크린 모달이 아닌, 시트 형식으로 화면을 구성하였기 때문에 창을 아래로 내린다면 그대로 편집 창이 사라진다.
  • 해당 상황에서 작성한 내용이 있다면 편집을 취소할 것인지 확인해야 한다.

기존의 메모 내용 저장 변수 추가


이후 viewDidLoad에서 메모 편집 창으로 로드될 경우, 기존에 저장된 메모 내용을 해당 변수에 저장한다.

그런 다음 뷰컨트롤러를 텍스트뷰의 델리게이트로 지정


delegate란?

  • 대리자
  • 하나의 객체가 모든 일을 처리하는 것이 아닌, 처리해야 할 일들 중 일부를 다른 객체에게 넘기는 방식

구현 단계

  1. 채택 작업(프로토콜 추가)
  2. 위임자 지정(여기서는 viewController가 위임자)
  • 이제 이벤트가 발생하면 프로토콜에 따라 viewController가 대신 응답
  1. 프로토콜을 준수하는데 필요한 함수 작성

viewWillAppear,viewWillDisappear 추가

우리가 추가하려는 기능을 위해선 프레젠테이션 컨트롤러 델리게이트를 추가로 설정해야 함.

이렇게 하면 편집 화면이 표시되기 직전에 델리게이트로 설정되었다가, 사라지기 직전에 델리게이트가 해제된다.

채택 작업(extension에 작성)

UITextViewDelegate


textViewDidChange: 텍스트뷰가 편집될때마다 반복적으로 호출

  • 모달 방식으로 동작해야하는지 결정하는 플래그로 동작
  • 풀다운으로 닫기 전에 델리게이트 호출
  • iOS13 부터만 사용 가능 -> 사용할거면 availability condition 추가해야 함. (물론 내 작업 버전 기준에서는 상관 없다)
    • 만약 iOS13 이전 버전이라면 아래의 작업을 해주어야 한다.

텍스트뷰를 편집할때마다 원본과 다른지 확인, 원본과 다르면 메모가 편집된 것으로 판단. 편집된 경우 isModalInPresentation이 true가 되기 때문에 시트 방식의 풀다운이 작동되지 않는다. (창을 내려도 중간까지만 내려가다가 다시 원상복구됨.)

UIAdaptivePresentationControllerDelegate


  • 위에서 isModalInPresentation이 true가 될 경우 이 함수가 실행된다.
  • 이제 여기서 경고창을 추가하고, 사용자가 저장과 취소를 선택하도록 구현

경고창 표시 구현

AlertController 추가

버튼 추가

확인 액션

취소 액션

present

실행 화면

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글