개념때문에 엄청나게 삽질을 했네요... 금일 포스팅의 주제는 "뷰 안에 있는 뷰는 관리하지 않는다!"입니다.
뷰가 호출될 때에는 viewDidLoad 와 viewWillAppear 두 가지 메서드가 호출됩니다.
viewDidLoad 는 AppDelegate 에서 뷰가 생성시 (alloc) 되었을 때 호출이 가능합니다.
만약 그렇다면, 뷰 안에 뷰를 만들었을 경우.
이를테면, 부모 뷰에 UISegmentation 버튼을 구현하여서 가운데를 비워놓은 채 안에 전혀 다른 뷰(전혀 다른 클래스와 xib 파일) 을 세그먼테이션 클릭 시 옮겨간다고 구조를 짰을 경우.... 부모뷰에서 세그먼테이션 버튼을 클릭한다고 해서 그 안에 뷰에서 돌아가는 viewDidLoad 가 호출이 되느냐 안되느냐 문제가 발생합니다!
찬찬히 다시 생각해보면, 자식 뷰에서는 어떤 정보를 요청하고 파싱을 합니다.
부모뷰는 그저 세그먼테이션 버튼을 가지고 있는 채로 클릭하면 자식 뷰를 로딩해서 스크롤 뷰로 보여줍니다.
addSubView 와 removeSuperview 만을 사용하기 때문에, viewDidload 가 제대로 실행되지 않습니다.
왜냐하면 앞서 말했듯이 뷰가 아예 사라지고 생성되는 것이 아니라, 지속적으로 Stack 에 쌓이는 형태이기 때문에 불가능합니다.
그렇다면 viewWillAppear 을 사용해서 뷰가 보여질 때 웹에 요청을 하고 받아오면 되지 않느냐 !!!
하는 방법이 떠오르지만, 막상 그대로 짜보면 되지 않습니다....... 이유는 Appdelegate 에서 뷰 안의 뷰는 관리를 하지 않기 떄문입니다. 때문에 부모뷰의 viewWillAppear 부분에 [자식뷰 viewWillAppear:animated]; 를 통해 자식뷰의 viewWillAppear을 호출해 주어야 해결이 가능합니다...
휴 국내에서는 Segmentation ui 를 Custom 으로 짠 구조에 대한 예가 없어서... 정말 많이 헤매었네요
'옛글 > 아이폰 프로그래밍' 카테고리의 다른 글
[iOS프로그래밍] Navigation Bar 에 Button 붙이기 (0) | 2012.05.24 |
---|---|
[iOS프로그래밍] Objective-C Code Rule (0) | 2012.05.16 |
[iOS프로그래밍] Loaded “xxx” nib but the view outlet was not set 해결방법 (2) | 2012.05.11 |
[iOS프로그래밍] iOS 이미지 리소스 관리(Retina Ipad @2x 명명법포함) (1) | 2012.05.10 |
[iOS프로그래밍] iOS Bluetooth 사용 범위 (0) | 2012.05.09 |