4

AppDelegate で、UIViewController サブクラスを作成し、そのビューを追加したいと考えています。viw 自体はコードで指定されます - nib はありません。

アップルのドキュメントに基づいて、使用する必要があります

initWithNibName:nil bundle:nil];

次に、コントローラーのloadViewで、サブビューなどを追加します.

ただし、以下のテスト コードは機能しません。Apple のPageControl demoでAppDelegate コードをモデル化しました。これは、私のアプリが同様の構造を実装するためです (具体的には、ページ スクロール ビューを管理するための基本コントローラーと、ページを構築するための他のコントローラーの配列)。

しかし、ロギングにより initWithNibName:: と loadView の両方が起動することが証明されているため、AppDelegate コードが問題であると思われます。以下のアプリは動くのですが、画面が真っ白です。ラベル付きの緑のビューを期待しています。

AppDelegate

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        ScrollerController *controller = [[ScrollerController alloc] initWithNibName:nil bundle:nil];
        [self.window addSubview:controller.view];
        [self.window makeKeyAndVisible];
        return YES;
    }

ScrollerController (UIViewController サブクラス)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)loadView{
    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
    UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame];
    contentView.backgroundColor = [UIColor greenColor];
    self.view = contentView;

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 100, 40)];
    [label setText:@"Label created in ScrollerController.loadView"];
    [self.view addSubview:label];
}
4

2 に答える 2

5

使用してみてください: self.window.rootViewController = controller; の代わりに [self.window addSubview:controller.view];

@synthesize window;また、作成する 必要があることに注意してくださいself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

于 2012-05-30T20:20:49.947 に答える
4

initWithNibNamed: の代わりに、alloc と init、またはビュー コントローラー用に指定されたその他の初期化子を使用します。これはプロジェクトの例です

hoverViewController=[[BDHoverViewController alloc] initWithHoverStatusStyle:BDHoverViewStatusActivityProgressStyle];
self.window.rootViewController=hoverViewController;
[self.window makeKeyAndVisible];

また、アプリ デリゲートのウィンドウにルート ビュー コントローラーを追加するための正しい形式 (今のところとにかく) は次のようになります。

self.window.rootViewcontroller=controller;
[self.window makeKeyAndVisible];

ビューをウィンドウに追加する必要はありません。上記のコードはそれを自動的に行います。

幸運を、

T

于 2012-05-30T20:23:29.007 に答える