10장 아이패드에 대한 고려사항

927 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
927
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

10장 아이패드에 대한 고려사항

  1. 1. 아이패드에 대한 고려사항 발표자 : 공지훈 sagehoon@gmail.com
  2. 2. 해볼것!!기본적으로 제공하는 아이패드 뷰의 구조전세계 가카들을 위한 앱기존구조에서 기능추가새로운 버튼추가해서 기능추가
  3. 3. 아이패드는 화면이 크다.아이폰과는 다르다.보기좋게 넓게 쓰자.
  4. 4. 그래서 보통 이렇게 쓴다. - 분활뷰
  5. 5. 팝오버 뷰
  6. 6. 한번 해보자
  7. 7. 대략 줄거리프로젝트 생성후 Group & files를 보면RootViewController는 내비게이션 구조의 최상위 레벨 정의DetailViewController는 내비게이션 항목을 선택할때 오른쪽 영역에 크게 보여줄 내용을 정의기기가 회전할경우 분활뷰와 팝오버뷰 형태로변경된다.
  8. 8. 빌드 후 돌려보자.빌드하면 아이패드 앱이 뜬다.
  9. 9. MainWindow.xibobject들의 구조커넥션 인스펙터
  10. 10. DetailView.xibMainWindow.xib가 로드되고 상세뷰 컨트롤러가 생성될때 이 컨트롤러가 같은nib에서 GUI를 찾지 않고 이 필드에 지정된 nib파일을 로드한다는 뜻이렇게 하면 어떤뷰가 메인뷰에 속하고 어떤뷰를 별도 nib파일로 관리할지 지정할수 있다.DetailView.xib는 MainWindow.xib안에 속한다고 봐도 된다.이렇게 하는 이유는 코드와 관련없는 설정정보가 코드사이에 끼는것을 막을수가 있다.코딩과 화면을 분리할수가 있다.
  11. 11. PresidentAppDelegate.hWindow - 전체UISplitViewController - 앱의 최상위 껍데기rootViewController - 네비게이션 뷰 아래 있는 디테일 (왼쪽 디테일)detailViewController - 디테일뷰(오른쪽 디테일)
  12. 12. PresidentAppDelegate.m
  13. 13. RootViewController.h
  14. 14. RootViewController.m소스코드 참조 책 413, 414p
  15. 15. RootViewController.m의 주요 부분contentSizeForViewInPopover- 뷰컨트롤러가 팝오버 컨트롤러에 대한 디스플레이를 제공할때 사용할 크기를설정한다.이 사각형은 가로 너비가 최소 320 픽셀이어야 하지만 이와 별개로 크기는 얼마든지 원하는 대로 설정할수 있다.shouldAutorotateToInterfaceOrientation- 디스플레이가 옆으로 뒤집을때 방향 바꾸게 할거냐 말거냐 이 처리방향 바꾸기 싫음 YEStableView:didSelectRowAtIndexPath- 앞에서 사용자의 행선택에 반응하는 테이블 뷰 컨트롤러 구현시 이메서드에서 새로운 컨트롤러 생성하고 이를 내비게이션 컨트롤러의 스택에 쌓았다.하지만 이 애플리케이션에서는 보여주려는 컨트롤러가 이미 화면에 배치된 상태. 이컨트롤러는 바로 xib파일에 들어 있는 DetailViewController다.따라서 여기서는 DetailViewController 인스턴스에게 보여줄 디스플레이만 알려주면 된다.
  16. 16. DetailViewController.hDetailViewController는 앞에서 (RootViewController클래스 내에서) 본detailItem 속성이외에nib파일에 있는 GUI컴포넌트를 연결하기 위한 두개의 아웃렛(toolbar 및detailDescriptionLable)과 더불어 잠시후 볼 팝오버 컨트롤러에 대한 인스턴스 변수도 갖고 있다.
  17. 17. DetailViewController.m소스코드 참조 책 416, 417p
  18. 18. 내부 클래스클래스 내에서만 사용하고 헤더 파일을 통해 다른 클래스에게 노출되지 않는속성과 메서드를 정의할수 있다.여기서는1. 앞에서 선언한 인스턴스 변수를 활용하는 popoverController속성을 선언2. 디스플레이를 업데이트 할때마다 호출할 유틸리티 메서드를 선언popoverController의 속성의 용도는 뒤에 가서....
  19. 19. setDetailItem 메서드앞에 세터 프로퍼티와 신디사이즈를 만들었는데 왜 또 세터 메서드를 만들까?여기서는 사용자가 세터메서드 호출시 임의의 동작을 해야하기 때문에 따로정의한것이다.내용 - popoverController가 (nil이 아닌경우 즉) 있는경우이를 사라지게하는 내용.
  20. 20. popoverController는 어디서?아이패드가 세로모드로 회전할때 호출되는 메서드- UIPopoverController : 분할뷰의 왼쪽에 있는 뷰를 포함하도록 미리 설정된 컨트롤러- UIBarButtonItem : 이 팝오어뷰를 보여주도록 설정된 버튼이다.GUI에서 UIToolBar가 포함된경우- 버튼항목을 툴바에 포함시키기만 하면 사용자가 위의 버튼을 눌러서 네이게이션 뷰를 호출할수있다는것.GUI에서 UITooBar가 없는 경우- 팝오버 컨트롤러는 여전히 인자로 넘어오므로이를 GUI요소에 대입하면 해당요소를 통해 팝오버뷰를 보여줄수있다.
  21. 21. popoverController를 회수사용자가 다시 가로모드로 전환시 호출이 시점에서는 분활뷰 컨트롤러는 뷰의 왼쪽영역을 다시 그려야 하므로 앞에서가져온 UIBarButtonItem을 제거한다.
  22. 22. PresidentList 시나리오1. PresidentList.plist 파일을 Suppoting Files폴더에 옮긴다.2. RootViewController.h에 NSArray presidents객체 및 property를 생성한다.3. RootViewControlle.m에 synthesize로 presidents객체를 받는다.4. viewDidLoad메서드에 앞서 추가한 plist에서 대통령정보를 옮겨서 NSArray presidents에 옮겨 담는다.delegate메서드부분5 행개수를 지정하는 numberOfRowsInSection 에서 presidents변수안의 데이터 갯수만큼 지정하도록 변경.6. 각셀에서 대통령 이름을 볼수있게 cellForRowAtIndexPath에 NSDictionary *president = [self.presidents objectAtIndex:indexPath.row]; 추가- cellForRowAtIndexPath : 테이블에 데이터를 추가하기위한 UItableViewCell을 만드는 메서드7.didSelectRowAtIndexPath 상세뷰 컨트롤러 에 URL을 넘겨준다.
  23. 23. DetailView 시나리오상세뷰에서 url대신에 좀더 유용한정보를 보여주고 싶다.1. UIWebView webView,property를 h 에서 선언하고 m에서 sythesize로 받는다.2. detailView.m의 configureView메서드로 이동해서 url를 webView객체에 넣고로드 시킨다.3. barButtonItem.title을 바꾼다. 버튼 이름바꾸는것이다.4. viewDidUnload dealoc에서 webView객체를 릴리즈시킨다.
  24. 24. 언어변경 버튼추가내용 :툴바 우측의 버튼이 생성되고 버튼을누르면 언어별 목록이 담긴 테이블뷰가 뜬다.해당 테이블뷰의 언어 선택시 디테일뷰의 내용이 그 해당언어로 새로고침 된다.현재는 UIPopoverController만 있는 상황새로운 내용을 추가하기 때문에 새로운 UIViewController를 생성하고 거기서작업을 해야한다.
  25. 25. LanguageListController.h
  26. 26. viewDidLoad팝오버시 보이는 테이블의 크기와 이름,코드를 정의
  27. 27. 테이블뷰 기본 델리게이트 메서드1.section 1개 셋팅2.row viewDidLoad 에 셋팅한 코드수만큼 셋팅3.cell에 넣을 언어명 추가
  28. 28. 선택한 언어 넘겨주기선택시 DetailViewController에 선택된 언어를 넘겨준다.
  29. 29. 다시 DitailVIewController로버튼,컨트롤러,넘겨받은 언어문자열버튼눌렀을때의 액션
  30. 30. nib에서 button outlet등록1. object library에서 FlexibleSpaceBarButtonItem을 선택해서 드래그앤 드랍을한다.2. 크기를 맞추고, 버튼이름을 Choose Language로 변경.3. files owner 선택하고 ctrl 드래그해서 touchLanguageButton메서드를 선택.4. files owner 선택하고 ctrl 드래그해서 버튼을 선택.
  31. 31. DetailViewController.m1. import "LanguageListController.h"를 한다.2. 앞서 정의한 프로퍼티와 메서드를 신디사이즈로 받고 메서드는 구현한다.3. 앞서 Language컨트롤러에서 받은 언어 텍스트와 위키피디아 url을 합체시킬내부 함수 modifyUrlForLanguage 를 구현단다.4. setDetailItem에 modifyUrlForLanguage를 넣어서 url을 애초에 합체시키게만든다.그리고 기존의 버튼이 하나였다가 두개 가 되면서 팝오버가 하나가 되서 관련테이블이 올라왔을때는 하나가 더올라올려고 하면 기존의 것을 사라지게하는로직을 구현한다.5.setLanguageString 최초에 설정된 언어선택을 위해서 만드는 메서드4번에 추가한 메서드내용은 이미 로딩된 상태에서의 언어선택으로 인한 변동을위해서6. 버튼 메서드를 구현한다. 눌렀을경우 팝오버되면서 뷰가 뜨도록 하느 액션.
  32. 32. Q&A
  33. 33. 감사합니다.

×