2011-03-04 4 views
47

디바이스 수정 자 (예 : ~ ipad)를 사용하여 Info.plist에서 디바이스 별 키를 제공하고 디바이스 별 시작 이미지 (iPhone의 경우 Default.png, iPad의 경우 Default ~ ipad.png)를 지정할 수 있습니다 예를 들어,). 이 두 가지는 구체적으로 Apple Docs에 언급되어 있지만 다른 종류의 파일에도 적용됩니다.iOS : xib 파일을로드하기 위해 기기 수식어를 사용 하시겠습니까?

initWithNibName:bundle:을 통해 .xib 파일을로드하는 데 효과적이라는 것을 발견했습니다. ...

MyViewController *viewController = [[MyViewController alloc] 
            initWithNibName:@"MyView" bundle:nil]; 

완전히 아이 패드에 ~ ipad.xib을 MYVIEW를로드 및 기타 장치에 MyView.xib : 그래서 예를 들어, 나는 MyView.xib 및 MYVIEW ~ ipad.xib,이 코드를 가질 수 있습니다 .

그럼, 1)이 문서는 어딘가에 기록되어 있습니까? 애플의 모든 문서를 찾을 수 없었다. UI_USER_INTERFACE_IDIOM()을 검사하고 어디에서나 두 개의 서로 다른 nib 이름을 하드 코딩하는 것이 확실하지만, 문서화되지 않은 경우에는이를 신뢰하지 않습니다.

그리고 2) 누구나 iOS 버전이 작동하기 시작했는지 알 수 있습니까? 나는 단지 4.2에서 그것을 시도했고, 거기서 작동한다. 일반적으로 장치 수정 자 (위에 나열된 문서화 된 경우에도)는 최소 4.0입니다.

+1

좋은 지점. 분명히 이것은 보편적 인 앱을위한 확실한 4.0 버전입니다. 아마 이것은 iPad에서 3.2에서 작동 했습니까? 번들 프로그래밍 가이드를 살펴보면 이미지를 항상 리소스 로딩의 예제로 사용하지만 행간을 다시 읽으면 앱 번들을 통해로드 된 모든 리소스가 동일한 메커니즘을 통해 중단 될 수 있습니다. – petert

답변

25

실제로는 문서에 명시 적으로 정의되어 있지만 각주로 명시되어 있습니다.

참고 : 당신이 아이폰 OS에 대한 유니버설 응용 프로그램을 개발하는 경우, 당신은 장치 -를 사용할 수있다 "NSBundle을 사용하여 NIB 파일로드"의 맨 아래에있는 노트에서

CocoaNibs

고유 한 이름 규칙을 사용하여 기본 장치 에 대해 올바른 펜촉 파일을 자동으로로드합니다. 를 참조하십시오 펜촉 파일의 이름을 지정하는 방법에 대한 자세한 내용은 은 "아이폰 OS가. 디바이스 별 자원 지원"그러나 Cocoa Conceptual LoadingResources

로 연결

, 그래, 이것은 4.0 이상 전용 기능입니다.

2

iOS 3.2 이상에서 사용하는 적절한 기술은 UI_USER_INTERFACE_IDIOM() 기능입니다. 일반적으로 적절한 XIB를 사용하여 UIViewController을 초기화하려면 삼항 연산자를 사용합니다.

UIViewController* controller = [[UIViewController alloc] 
    initWithNibName:UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 
    @"YourViewController-iPad" : @"YourViewController" andBundle:nil]; 
+2

iOS에는 명명 체계가 내장되어 있으므로이 세 가지 조건부 항목을 포함 할 필요가 없습니다. xib을 올바르게 명명하면 간단한 alloc/init을 사용할 수 있습니다. –

+1

오른쪽, 삼항 연산자를 사용하는 것은 좋은 방법이지만 xib의 이름을 올바르게 지정하면 동일한 작업을 수행하기 때문에 차라리 그렇게 할 것입니다. 나는 내 질문에 정말로 대답하지 않는다고 말하고있는 것 같다. – zpasternack

50

나는 이와 동일한 문제가있었습니다. 대답은 처음에는 이해가되지 않았지만 좋은 소식은 쉽게 할 수 있다는 것입니다! :)

수정 자없이 iPad xibs의 이름을 지정하고 iPhone 수정자를 ~ iphone 수정 자로 지정하면 올바르게 선택됩니다.

그래서 MyViewController를 사용하면 iPad의 경우 MyViewController.xib, iPhone의 경우 MyViewController~iphone.xib이됩니다. 그런 다음 간단한 alloc/init을 사용하여 View Controller를 초기화 할 수 있습니다.

[[MyViewController alloc] init] 오른쪽 xib를 잡을 것입니다.

XCode에서 새로운보기 컨트롤러를 만들 때 xib는 MyViewController.xib라는 이름이 붙을 것이고 ipad 크기의 xib가되기를 원하기 때문에 항상 ipad로 포맷 할 상자를 선택합니다 . 그런 다음 iPhone 용으로 포맷 된 두 번째 xib을 만들고 ~ iphone 수정 자로 이름을 지정합니다.

설명서는 때때로 약간 모순이지만이 페이지에서는 식별자가있는 리소스가 iPad로 기본 설정되는 방법에 대해 설명합니다.

ImageSoundResources

확인 고해상도 이미지 사용에 대한 부분. 나는 우리가 이미지가 아닌 xib을 말하고 있지만 그것이 작동한다는 것을 안다. 마지막 6 개의 앱 모두이 관용구를 사용했습니다.

+1

그게 다 좋긴한데, 내 요점은 어떤 공식 문서에서도 리소스 파일이 일반적으로 장치 수정 자 관용구를 사용한다고 언급하지 않는다는 것입니다. 나는이 동작에 관한 공식 문서 및/또는 최소 iOS 버전에 관한 공식 문서를보기를 희망했다. – zpasternack

+0

xibs에 대해 명시 적으로 설명한 문서에서 아무 것도 찾을 수 없었지만 Image에 대한 위의 링크 된 설명서를 발견했을 때 xibs에도 적용될 수 있기를 기대했지만 ... 그리고 비올라, 그것은했다. .. 그리고 dev는 그후 이래로 산들 바람이었다. 나는 4.0 이후 그것을 사용 해왔다. 미안해, 내가 너를 줄 수있어! –

3

나는 사람하고 내 자신의 질문에 대답하기 싫어,하지만 난 대답은 생각 :

1) 아니, 명시 적으로 애플의 문서에서 설명하지, 그리고
2) 4.0 이상 (내 자신의 테스트를 기반으로)

정말로 저장하는 코드는 UI_USER_INTERACE_IDIOM()에 대한 몇 줄의 코드 검사입니다. 아직도, 나는 그것을 잡을 것이다. 적은 코드는 적은 코드입니다.

관련 문제