uiview не отображается в приложении делегат - PullRequest
4 голосов
/ 11 декабря 2010

Когда я выполняю приведенный ниже код в симуляторе, я ожидаю увидеть красный цвет на экране, но вместо этого он весь черный, почему?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  UIView * myView = [[UIView alloc] initWithFrame:[window bounds]];
  [myView setBackgroundColor:[UIColor redColor]];
  [window addSubview:myView];
  [window makeKeyAndVisible];
  return YES;
}

Если я добавлю инициализацию окна, это не поможет:

window = [[[UIWindow alloc] init] initWithFrame:[[UIScreen mainScreen] bounds]];

Мои проблемы начались, когда после создания универсального оконного проекта в XCode я решил удалить файлы xib для iPad / iPhone и файлы делегатов приложения iPhone / iPad, которые были автоматически созданы в проекте, и вместо этого иметь одного делегата приложения. с контроллером представления, который строит представление программно на основе устройства. Теперь я не могу отобразить простое представление, созданное в делегате приложения.

Редактировать: я удалил добавление вида и теперь установил цвет фона окна на красный. Это не поможет, но если я зайду на рабочий стол в симуляторе и снова открою запущенное приложение, я получу красный экран. Опять же, я озадачен, почему я не вижу красный при первом запуске приложения.

Ответы [ 2 ]

8 голосов
/ 11 декабря 2010

Ниже приведены инструкции по установке универсального iOS-проекта без интерфейса InterfaceBuilder.

  1. Удалите все ассоциации с файлами .xib в вашем списке свойств для приложения. Delete the .xib file references from your application plist

  2. Удалить все .xib файлы из проекта

  3. (Необязательно) Создайте общий класс делегата приложения, а затем удалите файлы AppDelegate_iPad. * И AppDelegate_iPhone. *. (Скопируйте, вставьте любой код из существующих файлов перед удалением)
  4. Измените свой файл main.m на имя делегата приложения. Я решил изменить и использовать AppDelegate_iPhone в качестве примера. См. Документацию: Справочник по UIApplication

    // main.m int main (int argc, char * argv []) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    // Start an iPhone/iPad App using a .xib file (Defaults set in .plist)
    //int retVal = UIApplicationMain(argc, argv, nil, nil);
    
    // Start the iPhone/iPad App programmatically
    // Set the 3rd argument to nil, to use the default UIApplication
    // Set the 4th argument to the string name of your AppDelegate class
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate_iPhone");
    
    [pool release];
    return retVal;
    

    }

  5. Обновите код делегата приложения.

    // AppDelegate_iPhone.m - (BOOL) приложение: (UIApplication *) приложение didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {

        // Override point for customization after application launch.
        NSLog(@"Launch my application iphone");
    
        // Create the window, it's not created without a nib
        window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    
        // Create a subview that is red
        UIView *myView = [[UIView alloc] initWithFrame:[window bounds]];
        [myView setBackgroundColor:[UIColor redColor]];
    
        // Add the subview and release the memory, sicne the window owns it now
        [self.window addSubview:myView];
        [myView release]; 
    
        [self.window makeKeyAndVisible];
    
        return YES;
    }
    
1 голос
/ 11 декабря 2010

Я пытался запустить твой код, и он работал для меня.Я получил пустой вид, который был окрашен в красный цвет.Вы пытались добавить точки останова и проверить, что ваш код действительно выполняется?В противном случае, единственное, что я могу придумать, это что-то с вашим UIWindow.

...