티스토리 뷰

Swift + iOS/CRUD

[ios] 스토리보드 없이 CRUD - Delete

군옥수수수 2017. 12. 22. 16:17

스토리보드 없이 CRUD - Remove


안녕하세요. 오늘은 지난 포스팅에서 다루었던 Update에 이어 Remove를 구현해보도록 하겠습니다. 늘 시작에 앞서 말씀드리지만 이전 포스팅을 읽고 오셔야 코드의 전체적인 흐름을 파악하시는데 도움이 되실 겁니다.


그리고 이번 Remove를 구현하는 포스팅에서는 NotificationCenter를 사용할 것이기 때문에 이에 대한 기본적인 사항을 숙지하시고 시작해주시기 바랍니다. 참고로 NotificationCenter에 관해 작성한 포스팅도 있으니 참고하시기 바랍니다.


그럼 바로 시작해보도록 하겠습니다.


1. Remove 버튼

먼저 가장 기본적으로 데이터를 삭제할 때 사용할 버튼을 하나 만들어야 합니다. 그리고 이 삭제 버튼은 하나의 친구 정보를 눌러 EditFriendViewController로 넘어갔을 때 존재해야 합니다. 저는 이를 UIButton이 아닌 하나의 셀로 구현할 것입니다. 셀을 이용해 Remove 버튼을 만들기 위해서는 우선 EditFriendViewController에서 다음의 코드들을 추가해주어야 합니다.

 

먼저 EditFriendViewController 의 테이블 뷰에 하나의 Section을 더 추가해주어야 합니다. 테이블 뷰의 기본 Section 값은 1이고 현재 그 Section에는 데이터의 정보를 입력받는 TextField들이 존재합니다. 이제 추가되는 Section의 셀에는 삭제 기능이 들어갈 것입니다.


  1. TextField가 존재하는 Section, 삭제 기능의 셀이 존재하는 Section 이렇게 두 개의 Section이 존재할 것이니 2를 반환합니다.
  2. 첫 번째 Section에서는 두 개의 TextField 셀이 필요하기 때문에 2를, 두 번째 Section에서는 하나의 삭제 기능을 하는 셀이 필요하기 때문에 1을 반환합니다.
  3. 이제 셀을 생성하는 메소드에서도 위와 같이 Section에 따른 셀을 다르게 생성해주어야 합니다. 기존의 TextField가 있는 셀은 indexPath.section이 0, 즉 첫 번째 Section에 존재하고 삭제 기능의 셀은 indexPath.section이 1, 즉 두 번째 Section에 존재하기 때문에 위와 같은 코드를 작성합니다.

2. NotificationCenter

삭제 버튼의 셀을 만들었으면 이젠 삭제 기능을 구현해주어야 합니다. 포스팅의 도입부에서 말씀드렸듯이 저는 이를 구현하기 위해서 NotificationCenter를 사용할 것입니다. 이를 위해서는 총 세 가지의 준비 단계가 필요합니다. 간단하게 표현하자면 다음과 같습니다.

 

  1. 알람 이름 설정
  2. Observer 설정 ( 알람을 듣고 행동을 하는 Object)
  3. 알람 발생

 그럼 하나하나 작성해보겠습니다.

1. Notification.Name

먼저 우리는 알람의 이름을 설정해주어야 합니다. 그리고 reuseableIdentifier를 만들 때와 마찬가지로 문자열을 직접 입력하는 것이 아닌 하나의 변수를 만들어줄 것입니다.


  1. 사실 Notification.Name은 어디 선언해도 상관없습니다. 하지만 해당 이름의 역할을 분명히 하기 위해 Friend 클래스 안에서 선언해주었습니다.
2. addObserver

그리고 알람이 발생했을 때 해당 알람에 대한 행동을 취해주는 객체를 정해주어야 합니다. 우리는 이를 addObserver 메소드를 통해 설정해줄 것이며 그 객체는 MainViewController가 될 것입니다.


  1. Friend.didDelete의 이름을 갖는 알람이 발생했을 때 self, 즉 자신이 deleteFriend(_:)라는 메소드를 실행시켜 해당 알람에 대한 행동을 취할 것이라는 의미입니다
3. 알람 발생

이제 알람을 발생시켜야 합니다. 삭제라는 행위가 일어나는 곳은 EditFriendViewController의 삭제 버튼 셀이기 때문에 해당 셀이 눌렸을 때 발생해야합니다.


  1. 삭제 버튼 셀은 두 번째 Section이기 때문에 해당 Section의 셀에 대해서만 터치 액션을 구현합니다.
  2. 정말 삭제할 것인지 한반 더 확인하는 차원에서 UIAlertController를 만들었습니다.
  3. 삭제 버튼을 눌렀을 때 비로소 알람을 발생시킵니다. 하지만 이 때 삭제할 친구의 정보를 같이 보내주어야 하기 때문에 self.friend를 인자로 넘깁니다.

 

이렇게 되면 알람의 이름, Observer 그리고 알람을 발생시키는 것까지 완성했습니다. 마지막으로 addObserver 메소드를 구현할 때 실행되는 메소드인 deleteFriend(_ :)를 구현해주면 됩니다.

 

4. deleteFriend(_ :)

  1. 먼저 위에서 알람과 함께 보낸 객체가 Friend 타입의 객치인지 검사합니다.
  2. 해당 객체가 friends에 실제 존재하는지, 존재한다면 몇 번째 인덱스에 존재하는지 검사를 합니다.
  3. 그리고 해당 인덱스의 요소를 삭제합니다.

3. Table View Style : Grouped vs Plain

이제 삭제를 위한 기능은 모두 구현했습니다. 이제 마지막으로 기능 외적인 UI를 살짝 고쳐보도록 하겠습니다. 기존의 EditFriendViewController 는 세 개의 셀 이외에는 셀이 존재하지 않음에도 밑에 하얀 빈 공간을 방치합니다. 이를 수정하기 위해 EditFriendViewController.xibTable View StylePlain에서 Grouped로 바꿔주셔야 합니다.


이제 Plain과 Grouped의 차이점을 확인해보시기 바랍니다.


Grouped              Plain


마무리

오늘은 이렇게 CRUD의 마지막 Remove를 구현해보았습니다. 이제 남은 것은 부가적인 기능들을 추가하는 것입니다. 다음 포스팅에서는 데이터들을 영구적으로 저장하는 방법과 슬라이드를 밀어서 데이터를 삭제하는 방법을 알아보는 시간을 갖도록 하겠습니다. 감사합니다.


Source : github


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함