TIL

[240320] Segue/Navigation Controller/didSelectRowAt/스와이프

2024. 3. 20. 10:03

1. 세그웨이 방식을 present modally에서 show(e.g. push)으로 바꾸면, 자동으로 네비게이션바가 생성되어야 하는데,

Xcode를 껐다 켜봐도..계속 모달 방식 그대로였다.

그래서 네비게이션 컨트롤러를 직접 추가해보기로 했다!

먼저 첫번째 뷰컨트롤러의 Attributes Inspector 세번째 섹션에서 Is Initial View Controller를 해제해준다.

그리고 네비게이션바 컨트롤러를 추가한 후 함께 추가되는 Root View Controller만 지워준다.

대신 첫번째 뷰컨트롤러를 Root View Controller로 설정하고 다시 show 방식으로 지정해주면 네비게이션바가 생긴다!

 

 

2. 문제 두가지.. 앱을 실행하고 처음 탭은 인식이 안되고, 두번째 탭부터 인식이 됐다 ..뭐지? 하면서 상세페이지로 넘어가면 해당 셀의 데이터가 아니라 이전에 선택했던 셀의 데이터를 띄우고 있었다 .. 예시 코드와 아무리 비교해봐도 문제가 없어보이는데,, 진짜 눈크게 뜨고 한글자 한글자 읽어봤더니 didSelectRowAt이 아니라 didDeselectRowAt 메서드를 쓰고 있었던 것.. 너 누군데 ㅠㅠ

// 해당 행이 선택되었을 때 실행되는 메서드
func tableView(UITableView, didSelectRowAt: IndexPath)

// 해당 행의 선택이 해제되었을 때 실행되는 메서드
func tableView(UITableView, didDeselectRowAt: IndexPath)

그랬구나 셀 선택이 해제됐을 때 실행되는 메서드 안에 상세페이지로 넘어가도록 세그웨이를 구현해놔서 자꾸 이전 셀 데이터를 띄웠구나!

쨌든 점심 먹기전에 찾아서 맘 편히 밥 먹을 수 있겠당 룰루

 

 

3. 드디어 Todo 앱 기본 구현 + 하이라이트, 네비게이션, 날짜 등 자잘한 추가 구현 끝!인줄 알았는데

할일 완료시 취소선 구현까지는 문제 없었는데, 스와이프 해서 하이라이트 처리 구현까지 하니 취소선이 왔다갔다함.. 고치러 가보자

찾았다

저기 써놓은 reloadData() 때문이었다. reloadData()는 화면 상 보이는 테이블뷰 전체를 업데이트하는 메서드이다. 저걸 지우니까 정상적으로 작동함! 이미 reloadRows를 통해 해당 셀만 변경되도록 해주었는데 reloadData를 써서 관련없는 셀들까지 변경시킨 것이다. 근데 어떤 흐름으로 취소선이 왔다갔다 하는지는 잘모르겠다.