2009-05-01 5 views
7

모든 코코아 터치 템플릿이 펜촉을로드하도록 설정되어있는 것처럼 보입니다.xbox없이 코코아 터치에서 프로그래밍 방식으로 뷰 컨트롤러 및 뷰 계층로드하기

뷰 컨트롤러를 사용하려는 새 프로젝트를 시작하고 nib/xib가 아닌 프로그래밍 방식으로 뷰 (계층)를로드하려는 경우이를 설정하거나 템플릿을 조정하는 단계는 무엇입니까?

로드 뷰 (LoadView)를 구현해야했지만이 작업을 시도 할 때마다 문제가 발생했습니다.

+0

네,로드 뷰에서 뷰와 하위 뷰를 초기화하고 추가하여 수행하려는 작업을 수행 할 수 있어야합니다. 코드를 게시하는 데주의해야합니까? –

+0

펜촉을 지우고 plist Main nib을 nil로 설정할 수 있습니까? 이 작업을 수행 할 때 AppDelegate가 기본 창을로드하고 컨트롤러 펜촉을 볼 수 있도록 설정되어있는 Prefab이 작동하므로 문제가 발생합니다. –

답변

16

완전한 프로그래밍 방식의 사용자 인터페이스 생성을 수행하는 것이 비교적 간단합니다. 첫째, 당신은 다음과 같은 것을보고 main.m을 편집해야합니다

MyAppDelegate 응용 프로그램 위임 클래스의 이름입니다
int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [NSAutoreleasePool new]; 
    UIApplicationMain(argc, argv, nil, @"MyAppDelegate"); 
    [pool release]; 
    return 0; 
} 

. 즉, MyAppDelegate의 인스턴스가 시작시 만들어지며, 이는 애플리케이션의 주 Nib 파일에서 일반적으로 처리합니다.

MyAppDelegate 내에서, 당신의 아래 applicationDidFinishLaunching을 구현 : 다음과 같은 방법 : MyRootViewController는 창문의 기본 뷰에 대한 뷰 컨트롤러

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{  
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    if (!window) 
    { 
     [self release]; 
     return; 
    } 
    window.backgroundColor = [UIColor whiteColor]; 

    rootController = [[MyRootViewController alloc] init]; 

    [window addSubview:rootController.view]; 
    [window makeKeyAndVisible]; 
    [window layoutSubviews];  
} 

. 메인 윈도우를 초기화하고 MyRootViewController가 관리하는 뷰를 추가해야합니다. rootController는 나중에 참조 할 수 있도록 대리자 내에 인스턴스 변수로 보관됩니다.

이렇게하면 프로그래밍 방식으로 MyRootViewController를 통해 사용자 인터페이스를 생성 할 수 있습니다.

+0

@Brad Larson, 안녕하세요, 고맙습니다. –

3

UIView 자체에 계층 구조가 없으므로 UINavigationController가 수행합니다. 그래서 그들 중 하나를 초기화하고 UIViewController를 스택에 띄웁니다. 가능한 가장 기본적인 방법으로 XIB 파일을 사용하지 말아야합니다. 당신은 이것을 기반으로 할 수 있어야합니다.

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
    UINavigationController *navController = [[UINavigationController alloc] init]; 

    UIViewController *viewController = [[UIViewController alloc] init]; 

    // set the properties of viewController here, to make it look like you want 

    [navController pushViewController:viewController animated:NO]; 

    [window addSubview:navController.view]; 

    // Don't forget memory management 
    [navController release]; 
    [viewController release]; 

    [window makeKeyAndVisible]; 
} 
+4

실제로, UIViews는 탐색과 관련하여 생각하고있는 것과 동일한 유형의 계층 구조가 아닌 화면의 레이아웃에 대한 계층 구조를 유지 관리합니다. –

+0

사실입니다. 나는 그것이 그가 묻고있는 것이 아니라고 생각했지만, 당신은 절대적으로 옳습니다. – mmc

관련 문제