2009-07-14 2 views
3

내부에있는 일부 컨트롤, 텍스트 필드 및 일부 단추가있는보기를 만들고이를 복제하여 탭보기의 탭 내용으로 표시하려고합니다. 각 탭에는이보기의 인스턴스가 있어야합니다. 약도?보기 복사하기

답변

5

Dave DeLong이 거의없고 질문에 답변이 포함되어 있습니다 ("각 탭에는보기의 인스턴스가 있어야 함"). 프로그래밍 방식으로 뷰를 만들거나 NIB를로드하려면 UIViewController 하위 클래스를 만듭니다. 그런 다음 UIViewController 하위 클래스의 여러 인스턴스를 인스턴스화하고 모두 UITabViewController의 viewControllers 속성에 추가합니다.

View Controller Programming Guide으로 시간을 보내고 싶습니다. 같은 UIViewController 하위 클래스의 여러 인스턴스를 만드는 것은 실제로 솔루션에 거의 영향을 미치지 않습니다.

+0

물론, 그 아이폰에서만 작동합니다. Mac에서는 대신 NSViewController를 사용할 것이고 UIViewController가 비슷하게 작동한다고 생각하지 않습니다. –

+1

NSViewController는 UIViewController보다 훨씬 원시적이지만 위의 원칙은 동일해야합니다. 우리는 NSViewController가 등장하기 전에 오랫동안 Mac에서 "View Controller"를 구축 해왔다. (나는 자신 만의 제품을 많이 만들었다.) 프로그래밍 방식으로 뷰를 빌드하는 객체 (예 : loadView를 오버로드하는 것)는 iPhone에만 해당되는 것이 아니며 NSSegmentedControl 기반 탭 뷰 또는 다른 Mac 솔루션을 관리하는 데 여전히 합리적인 방법입니다. 즉, Mac에서는 NSViewController가 아닌 NSView 하위 클래스를 사용하여이 작업을 수행 할 수 있습니다. –

1

흠 ... 네가하고 싶은 것을 정확히 이해했는지는 잘 모르겠다. "duplicate"라는 단어는 프로그램에서 가장 자주 "냄새"를 나타 내기 때문에 매우 좋지 않습니다.

저는 코코아의 전문가가 아니며 객관적인 c도 아니지만 일종의 컨테이너 컨트롤 안에 컨트롤을 넣고 탭 뷰에서이 컨테이너 컨트롤을 인스턴스화 (복제보다는 재사용) 할 수 있다고 생각하거나 어디에서든지.

+0

"각 탭에는이보기의 인스턴스가 있어야합니다." 어쨌든, 쓸데없는 대답 주셔서 감사합니다. – goo

+0

@goo 그가 말한 것은 정확합니다. View XIB로 뷰를 생성 한 다음 NSViewController를 사용하여 여러 번 인스턴스화 할 수 있습니다 (한 가지 방법 임). –

0

보기 계층 구조를 복제하는 빠르고 쉬운 방법은이를 인코딩하고 디코딩하는 것입니다. 예 :

NSData * encodedView = [NSKeyedArchiver archivedDataWithRootObject:myView]; 
NSView * myViewClone = [NSKeyedUnarchiver unarchiveObjectWithData:encodedView]; 
+0

이 접근 방식에는 많은 단점이 있습니다. 예를 들어,보기에 대상 및 조치가 설정된 경우 대상이 또한 인코딩되지 않으면 복제되지 않습니다. –

+0

@ 존 동의, 따라서 "빠르고 더러운"=) –