Table View static 으로 만들 때

"Static table views are only valid when embedded in UITableViewController instances "라는 에러가 발생합니다.

그래서 별도로 Table View Controller 를 만들어서 Table View를 static으로 만들면 에러가 발생하지 않습니다…

왜 그런지 이해를 못 하겠습니다.

좋아요 1

왜 그런지라고 하니깐 어렵네요 ㅎㅎ 제가 찾아보기론 원래 static cell을 만드려면 ,custom cell을 xib로 만들고 이걸 배열로 만들어서 각각에 delegate를 직접 구현해줘야 했다고 합니다. 그래서 xcode4.2에서 UITableView 타입의 새로운 API를 제공해줬고 그걸 tableView(꼭 delegate와 datasource라는 프로토콜을 준수해야 하는)와 구분하기 위하고 훨씬 많은 기능이 있는 UITableViewController에서 사용할 수 있도록 한게 아닐까 싶네요… 포럼이니 이런 말도 끄적여봅니다 ㅎㅎ

참고로 스토리보드에서 가져다쓰는 tableView는 꼭 관련한 함수(cellForRowAt이나 numberOfrowInSection)를 준수해야 사용가능합니다. 하지만 static cell을 만드는 UITableViewController는 굳이 위와 같은 함수를 구현할 필요가 없습니다. 비슷한 뷰에 비슷한 역할을 하지만 내부적으로 움직이는 방식은 좀 다른 것 같아요~ (재사용셀을 사용하지 않는다던가…)

그리고 tableView처럼 화면 안에서 구현하고 싶으시다면 containerView를 사용하시고 그 안에서 TableViewController를 구현하시면 화면 일부에서도 정적 셀도 사용하실 수 있습니다!

정정할 부분이나 더할 부분은 고수님들이 알려주실거라 믿으며…

좋아요 1

상세한 감사합니다!
많은 도움이 되었습니다.

좋아요 2

@phs880623 님이 잘 적어주셔서 저는 약간의 정리만 더할께요.

UIViewController의 서브클래스인 UITableViewController는 TableView를 관리하기 위해 만들어진 클래스죠.
기본적으로 UIViewController에 테이블 뷰 추가하고 data source 와 delegate 연결한 뒤 구현을 하면 되지만,
UITableViewController는 UIView가 아닌 UITableView를 기본 뷰로 장착하고, 스토리보드에서 스태틱하게 설정을 하면 그 내용을 처리할 수 있도록 Data Source 와 Delegate도 일부 구현을 해 놓은 것으로 예상합니다(내부를 보진 않았지만 예상은 가능하죠)

그래서 TableView를 스태틱하게 사용하려면 이런 구현이 내부적으로 되어 있는 UITableViewController 를 통해서 테이블 뷰를 얻어내야만 하는 거죠.

좋아요 1