King of Stock

UITableView cellForRow(at:) 본문

IT 기술

UITableView cellForRow(at:)

king of stock 2018. 4. 4. 12:47

iOS 개발을 많이 하신 분은 과감히 안 보셔도 됩니다.


먼저 문제가 되었던 상황 및 로직은 다음과 같았습니다.



[대략적인 로직]


1.UITableView content는 Dynamic Prototypes(Prototype Cells: 2) 으로 설정이 되어있음


2.위에 설정된 2개의 cell 중에서 한 개는 사용자의 입력을 받는 UITextField를 포함한 Cell(InputCell 이라고 통칭) 이고 다른 한 개는 Label만 있는 Cell(SelectableCell 이라고 통칭)


3.평시에는 InputCell 4개만 보여지고, 첫번째 입력란에 값을 넣으면 텍스트를 기반하여 데이터를 조회후 1번 인덱스부터 조회결과를 SelectableCell로 채워넣는 형태의 로직


4.사용자 편의를 위해 키보드에 toolbar를 추가하여 포커싱을 이동할 수 있게 제공



화면 형태는 아래와 같습니다. 평시 상태와 조회된 상태 2개지요.


   




[문제]


두번째 화면처럼 첫번째 cell 내부에 UITextField 항목값에 의해서 조회 결과가  셋팅이 된 상태에서 [다음] 버튼을 눌렀을때 기대했던 동작은 첫번째 화면상에 종목 코드 placeholder 부분으로 포커싱이 이동하는 것이다. 너무나 평범한 그 소스는 아래와 같음


평시에(첫번째 화면) 아~~~~~주 잘 이동을 하는 상태이고, 두번째 화면처럼 조회결과가 왕창 생겼을때 미동도 하지 않았다...;;;

Cell들을 이루는 뷰모델 데이터를 다시 뜯어고쳐보고 breakpoint로 찍어보고 해보아도 개수의 문제는 아니였다. 기반 지식없이 무작정 코딩을 해보고 있는 거라 실마리가 나올법한 함수나 프로퍼티의 내용을 찍어봤다.


테이블뷰의 섹션 행을 가져와서 모든 요소를 cellForRow 함수를 사용하여 획득을 해보았는데 10개만 가져오는 특이한(?) 상황이 발생했다. 구글링을 해도 별 다른 내용이 안 보였다 ㅠㅠ

그래서 마지막이라 생각하고 ㅋㅋ cellForRow(at:) 함수에 관한 Documentation을 찾아봤다. 내용이 많이 않아서 정말 좋았다 ㅠㅠ


읽어내려 가는데 Return Value에 대한 설명에 cell이 보이지 않을 때에도 nil이 리턴 된다고 쓰여있었다. 아...

충격을 뒤로하고 보여지는 Cell인지 검사하고 안보이면 스크롤 이동후 포커싱 처리를 하는 것으로 로직을 수정 하였다.


Return Value

An object representing a cell of the table, of nil if the cell is not visible or indexPath is out of range



어쨌든 그러하다... 잘 읽어봅시다... 후...

Comments