Friday, April 1, 2011

iphone 개발 수업 4주차

4/1
<UI table view>
보통 서버에서 UI table view 의 리스트를 10~20 정도씩 받아온다(한꺼번에 다 받아 오는게 아니라).  그리고 아이폰은 터치해서 리스트 스크롤을 올리면 윗 셀이 없어지고 아래 셀이 생기는데, 이것은 없어지는 셀이 재사용 큐에 들어갔다가 내용이 바뀌어서 다시 UI table view 에 보이는 것이다. 그런데 table view에 여러개의 섹션이 있을때 각 섹션에서 없어지는 셀이 재사용큐에 들어갔다가 다시 재사용되는데 이때 어떻게 셀들을 구분하느냐, 식별자를 이용해서 이를 구별한다.
--------------------------------------------------------------------------------------------------


<Navigation 기반 application의 구조(World photos 예) > 
WorldPhotosAppDelegate ; 시스템 이벤트를 처리
   UINavigationController *navigationController; 화면 전환하는 객체(화면을 구성(backButton(혹은 leftButton), text, rightButton(이를 UINavigationBar라 함) 과 View가 있다), stack을 가지고 있어서 그 안에 UIviewController들이 있다. 이중에 하나를 선택헤서 View에 나타냄)


RootViewController ; RootViewController 객체가 생기면 RootViewController.xib xml에 안에 있는 내용을 나타냄(이벤트도 관리) , 이것이 첫 화면인데 이는 navigationController 의 stack에 첫화면으로 저장되어 있어서 이를 view 에 나타내기 때문이다.


RootViewController 의 UINavigationItem ; UINavigation Bar의 내용 설정, RootViewController가 이를 속성으로 가지고 있다.


PhotoDetailViewController ; photoDetailViewController.xib 이름의 xml 파일(이것은 interface builder로 만듬)의 객체를 생성하고 그 화면의 이벤트를 처리.


PhotoDetailViewController 의 UINavigationItem ; UINavigation Bar의 내용 설정


%%WorldPhotosAppDelegate와 navigationController는 RootViewController와 PhotoDetailViewController 에 의해 공유된다.%%
%%[[UIApplication sharedApplication]delegate]; 하면 UIApplication에서 공유하고 있는 것중 delegate를 return, 그러니까 WorldPhotosAppDelegate 를  return.%%


처음 시작하면 navigationController stack에는 RootViewController만이 들어 있다. 그래서 그것이 화면에 보이게 됨. RootViewController의 didSelectRowAtIndexPath 메소드 안에서 [self.navigationController pushViewController:detailViewController animated:YES]; 처럼 공유하고 있는 navigationController의 pushViewController메소드를 이용해서 화면에 보이고자하는 viewController, 즉 여기서는 detailViewController를 stack에 넣어서 화면 전환이 일어나게 한다(animated 는 화면을 자연스럽게 바꿀것인지, 아니면 확 바꿀 것이지를 나타냄). 이렇게 해서 detailViewController가 화면에 나타나게 되는데 이때는 UInavigation Bar 에는 backButton이 생기는데(RootViewController 화면에서는 이 버튼이 없다, 첫화면이라) 이 버튼을 누르면 다시 뒤 화면, 즉 RootViewController의 화면이 나타나게 되는데 이는  [self.navigationController [popViewController]]; 를 실행해서 stack 안에 detailViewController를 제거했기때문이다.

No comments:

Post a Comment