아이폰어플개발정보2010. 10. 12. 06:11
xib상의 화면컨트롤의 hierachy가 우선이다-UI관련 초보자들이 내밭는 주요한 오류사례
xib상의 hierachy가 아래와 같을때, 뷰하나를 1stView다음에 넣고싶을때

1stView
  -  1stImageView

이때, view를 다시 생성하고, 2ndView 명명시.
[self.1stView addSubview:2ndView];
[2ndView addSubView: 1stImageView]; <----런타임까지 문제없다. 단지 화면에 안나타난다.
위의 두줄코드를 쓰면될 것처럼 보인다.


위의 코드는 기존 스택구조를 무시하고
[기존스택]
1stView
  -  1stImageView

[바꾸고싶은 스택구조]
1stView
 - 2ndView
   -1stImageView
로 코드로 만들려고하고있다.


계층구조를 무시하고 코드상에서 생성한 2ndView가 억지로 1stView밑으로들어가려고하는 상황이다.
뷰와 이미지뷰가 프로퍼티로 선언되어있으면, 초기화시 이미 둘은 생성되었고 스택에 순서대로 들어가 있는 상황이다.

코드상에서 아무리 저렇게하면 스택상에 뷰와 이미지뷰사이에 끼워넣을 수 있을 것같지만
런타임에러라도 나면 안된다는 것을 알아채고 바로 고칠텐데, 오류가 안나니 문제가 없는 코드로 보이고, 
도대체 어디에서 문제가 발생했는지 다른곳을 보게된다.

해결은 간단하다. 스택구조로 뷰나 이미지뷰등이 들어가있다는 것을 인정하고,
위의 두 명령을 하기전에 [self.1stView addSubview:2ndView]; [2ndView addSubView: 1stImageView];
[1stImageView removeFromSuperview];를 젤 위에 넣어 일단 이미지뷰1stImageView를 빼내고
[self.1stView addSubview:2ndView]; 
[2ndView addSubView: 1stImageView];


결과는

[1stImageView removeFromSuperview];
[self.1stView addSubview:2ndView];
[2ndView addSubView: 1stImageView]
그리고 계층구조가 아래처럼 원하는 대로 된다.
1stView
 - 2ndView
   -1stImageView


Posted by 오늘마감

댓글을 달아 주세요