4

当我在模拟器中执行下面的代码时,我希望看到红色充满屏幕,但它全是黑色,为什么?

- (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 中创建基于 Window 的通用项目后,我的麻烦开始了基于设备以编程方式构建视图的控制器。现在我似乎无法显示我在应用程序委托中创建的简单视图。

编辑:我删除了添加视图,现在将窗口的背景颜色设置为红色。这无济于事,但如果我在模拟器中进入桌面并重新打开正在运行的应用程序,我现在会得到一个红屏。同样,我很困惑为什么我第一次启动应用程序时没有看到红色。

4

2 回答 2

8

以下是设置非 InterfaceBuilder (.xib) 通用 iOS 项目的步骤。

  1. 在应用程序的属性列表中删除与 .xib 文件的所有关联。 从您的应用程序 plist 中删除 .xib 文件引用

  2. 从项目中删除所有 .xib 文件

  3. (可选)创建一个通用的Application Delegate类,然后删除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)application:(UIApplication *)application 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;
    }
    
于 2010-12-11T20:27:31.333 回答
1

我试图运行你的代码,它对我有用。我得到了一个红色的空视图。您是否尝试过添加断点并检查您的代码是否实际执行?否则我唯一能想到的就是你的UIWindow。

于 2010-12-11T20:26:57.750 回答