2021.04.13 TIL ⏫

Jackson·2021년 4월 13일
0

TIL(Today I Learned)

목록 보기
17/42

무야호
그만큼 기쁘시다는거지

드디어 해결했다!!!!! 🥳🥳

TableView Drag and drop의 Issue를 모두 해결했다(물론 Local만)
하지만 이번 기능 추가는 나에게 너무 기뻤는데 이 기능을 위해서 4일동안 구현이 되질 않아서였다. 너무 많은 함수들과 그 함수들의 이해를 제대로 하지 못한 무분별한 사용에 함수가 꼬이면서 원하는 실행이 되질 않았다.

1. 카드 이동이 원할하지 않다. 😖

분명 밑의 카드를 위로 옮길때는 잘 움직였는데 밑으로 움직이니까 밑의 카드가 위로 올라가질 않았다. 억지로라도

func tableView(_ tableView: UITableView, targetIndexPathForMoveFromRowAt sourceIndexPath: IndexPath, toProposedIndexPath proposedDestinationIndexPath: IndexPath) -> IndexPath {...}

함수를 이용해서 움직이게 했었는데 이 함수가 오히려 발목을 잡고 있었었다. 다른 팀한테 다 물어보다가 동료 중 Cri의 말에 의하면

동일한 Table내에서의 Section 이동은 moveSection() 를 쓰거나 Drag/Drop에서 구현 할 수 있어요.

혹시나 해서 봤더니, 내가 두 메소드를 채택해서 사용하고 있었다. 앱크래쉬는 나지 않았지만, moveSection()을 위해 IndexPath()를 재조정하는 함수까지 사용하다보니 후에 문제가 된 것이다. 당연히 필요할 줄 알았던 함수가 필요없다는 점에서 한가지를 배웠었다.

2. Drop시에 선택된 카드를 어떻게 delete할 것인가. 🥴

func tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator){...}

가장 이상적이라고 생각한 것은 위 함수에서 어디에서 가져왔는지 sourceTableView와 indexPath를 인자값으로 가지는 것인데 그러질 못했다. 같은 팀인 Elly와 이 데이터를 처리하는 과정에서

    1. 전역변수에 저장
    1. NotificationCenter 이용

이렇게 생각해보았는데 1번은 더 나은방법이 있을 것 같구 2번은 데이터를 받아서 저장하려면 결국 변수가 필요하지 않을까 생각했다. 따라서 든 생각은

Singlton 💥

이미 카드에 대한 정보는 encoding하여 data처리화 시켰고 선택된 카드가 위치했던 tableView와 indexPath를 저장하는 싱글톤을 구현해보았다. 처음 구현한것이어서 이렇게 쓰는게 맞는가 싶으면서도 여러 블로그를 돌아다니며 예제를 따라 구현했다.


//Drag&Drop시 Drag할 때 픽업한 카드가 있는 보드type, 그리고 index를 저장할 수 있는 싱글톤객체 입니다.
class CardManager {
    static let shared = CardManager()
    
    var boardType : Int
    var indexPathSection : Int
    
    private init() {
        boardType = -1
        indexPathSection = -1
    }
    
    func setCard(type : Int, index : Int) {
        boardType = type
        indexPathSection = index
    }
    func getBoardType() -> Int {
        return boardType
    }
    func getIndexPathSection() -> Int {
        return indexPathSection
    }
    
}

구현한 영상 😎

아직 로컬로만 작업해서 내일 있을 네트워크 연결과정도 궁금하다.
하지만 오늘은 스스로 정말 만족하고 기쁜날이다. 무야호~~~

결론


  • 4일간의 같은 기능을 구현하는게 많이 힘들었고 과연 할수있을까 싶었지만 구현해서 다행이다.
  • 사실 혼자했으면 1주일 넘었을 수도 있다. 계속 다른 팀한테 물어보면서 구현해서 빨리 끝난게 아닐까 싶다.

0개의 댓글