没有笔尖创建视图控制器(Creating a view controller without a n

2019-09-17 15:47发布

在AppDelegate中,我想创建一个UIViewController子类,并添加它的观点。 本身将在代码中指定的VIW - 没有笔尖。

根据苹果的文档,我应该使用

initWithNibName:nil bundle:nil];

然后在控制器的loadView,添加我的子视图等。

然而,follwing测试代码下面没有为我工作。 我仿照苹果公司的AppDelegate代码的PageControl演示 ,只是因为我的应用程序将实施类似的结构(特别是基本控制器来管理一个分页滚动视图,以及其他控制器的阵列来构建页)。

但我怀疑我的AppDelegate代码是问题,因为记录证明initWithNibName ::和双方的loadView火。 如下面的应用程序运行,但屏幕是空白。 我期待有标签的绿色视图。

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];
}

Answer 1:

尝试使用: self.window.rootViewController = controller; 代替[self.window addSubview:controller.view];

请注意,你也应该@synthesize window; 和创建它self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];



Answer 2:

相反initWithNibNamed的:,只是使用alloc和init或任何用于视图控制器的其它指定initalizers的。 下面是从一个示例项目

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

也,正确形式(现在反正),用于将根视图控制器到应用程序委托的窗口是这样的:

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

你并不需要的视图添加到窗口。 上面的代码做它自动。

祝好运,

Ť



文章来源: Creating a view controller without a nib