본문 바로가기

옛글/아이폰 프로그래밍

[iOS프로그래밍] 뷰 안에 뷰는 관리하지 않는다!

반응형


 개념때문에 엄청나게 삽질을 했네요... 금일 포스팅의 주제는 "뷰 안에 있는 뷰는 관리하지 않는다!"입니다. 


뷰가 호출될 때에는 viewDidLoad 와 viewWillAppear 두 가지 메서드가 호출됩니다. 

viewDidLoad 는 AppDelegate 에서 뷰가 생성시 (alloc) 되었을 때 호출이 가능합니다. 



만약 그렇다면, 뷰 안에 뷰를 만들었을 경우. 

이를테면, 부모 뷰에 UISegmentation 버튼을 구현하여서 가운데를 비워놓은 채 안에 전혀 다른 뷰(전혀 다른 클래스와 xib 파일) 을 세그먼테이션 클릭 시 옮겨간다고 구조를 짰을 경우.... 부모뷰에서 세그먼테이션 버튼을 클릭한다고 해서 그 안에 뷰에서 돌아가는 viewDidLoad 가 호출이 되느냐 안되느냐 문제가 발생합니다! 


 찬찬히 다시 생각해보면, 자식 뷰에서는 어떤 정보를 요청하고 파싱을 합니다. 

부모뷰는 그저 세그먼테이션 버튼을 가지고 있는 채로 클릭하면 자식 뷰를 로딩해서 스크롤 뷰로 보여줍니다. 


 addSubView 와 removeSuperview 만을 사용하기 때문에, viewDidload 가 제대로 실행되지 않습니다. 

왜냐하면 앞서 말했듯이 뷰가 아예 사라지고 생성되는 것이 아니라, 지속적으로 Stack 에 쌓이는 형태이기 때문에 불가능합니다. 


 그렇다면 viewWillAppear 을 사용해서 뷰가 보여질 때 웹에 요청을 하고 받아오면 되지 않느냐 !!! 

하는 방법이 떠오르지만, 막상 그대로 짜보면 되지 않습니다....... 이유는 Appdelegate 에서 뷰 안의 뷰는 관리를 하지 않기 떄문입니다. 때문에 부모뷰의 viewWillAppear 부분에 [자식뷰 viewWillAppear:animated];  를 통해 자식뷰의 viewWillAppear을 호출해 주어야 해결이 가능합니다...


 휴 국내에서는 Segmentation ui 를 Custom 으로 짠 구조에 대한 예가 없어서... 정말 많이 헤매었네요


반응형