Как изменить представление rootViewController? - PullRequest
0 голосов
/ 02 марта 2012
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
    } else {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease];
    }

    CustomView1 *CustomView = [[CustomView1 alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController.view = CustomView;
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

Это появляется в AppDelegate.m

Я хочу изменить представление rootViewcontroller на CustomView, и попробовал код выше, но цвет фона остался черным, и сенсорное событие не былоt принято.

Где ошибка?

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Я не уверен, где ошибка, но у меня есть 2 предложения.

1) Изменить

CustomView1 *CustomView = [[CustomView1 alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController.view = CustomView;

до

CustomView1 *CustomView = [[CustomView1 alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
[self.viewController.view addSubview:CustomView];

или

2) В обоих указанных вами .xib-файлах перейдите в вид сверху и измените его на использование пользовательского класса. Затем вы можете просто запустить приложение как обычно

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
    } else {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

enter image description here

Примечание: Вы должны избегать именования переменных, которые начинаются с заглавных букв. Во многих стандартах кодирования классы начинаются с заглавных букв, а переменные начинаются со строчных букв.

0 голосов
/ 02 марта 2012

Если вам нужны два разных контроллера представления для управления одним классом представления, вы должны заставить контроллеры представления загружать правильный класс представления в их методе loadView или в их nib-файле.Я думаю, что контроллеры в вашем коде используют перья.Если так, отредактируйте кончики, чтобы установить класс представления в CustomView1.

CustomView1 - неудачный выбор имени класса, ИМХО, потому что это ничего не значит.

...