Ios 创建没有nib的视图控制器

Ios 创建没有nib的视图控制器,ios,model-view-controller,ios5,uiview,uiviewcontroller,Ios,Model View Controller,Ios5,Uiview,Uiviewcontroller,在AppDelegate中,我想创建一个UIViewController子类并添加它的视图。viw本身将在代码中指定-没有nib 基于apple文档,我应该使用 initWithNibName:nil bundle:nil]; 然后在控制器的loadView中,添加子视图等 但是,下面的测试代码不适合我。我以苹果的AppDelegate代码为模型,原因很简单,因为我的应用程序将实现类似的结构(特别是一个用于管理分页滚动视图的基本控制器,以及一系列用于构建页面的其他控制器) 但我怀疑我的AppD

在AppDelegate中,我想创建一个UIViewController子类并添加它的视图。viw本身将在代码中指定-没有nib

基于apple文档,我应该使用

initWithNibName:nil bundle:nil];
然后在控制器的loadView中,添加子视图等

但是,下面的测试代码不适合我。我以苹果的AppDelegate代码为模型,原因很简单,因为我的应用程序将实现类似的结构(特别是一个用于管理分页滚动视图的基本控制器,以及一系列用于构建页面的其他控制器)

但我怀疑我的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子类)

尝试使用:
self.window.rootViewController=控制器
而不是
[self.window addSubview:controller.view]

注意,您还应该
@synthesis窗口并创建它

self.window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen]bounds]]autorelease]

而不是initWithNibNamed:,只需为视图控制器使用alloc和init或任何其他指定的初始化器。下面是一个例子

此外,将根视图控制器添加到应用程序委托中的窗口的正确形式(至少现在是这样)如下所示:

self.window.rootViewcontroller=controller;
[self.window makeKeyAndVisible];
您不需要将视图添加到窗口中。上面的代码会自动执行此操作

祝你好运


T

我在演示项目中注意到有一个xib,其中AppDelegate是fole的所有者-可能这向应用程序提供了我缺少的部分?在ViewDidLoad之后检查您的视图包含的内容所有内容似乎都在那里-self.view:子视图:1子视图0:下半部分看起来不错,但是你有第一部分的资料来源吗?我之所以问这个问题,是因为我读过(我想是在苹果的文档中读到的)在没有nib的情况下初始化控制器的正确方法是使用nil。我看看能不能找到我在哪里读到的。我是这样读的,所以不一定权威:2a。以编程方式加载视图如果选择覆盖-loadView,则可以以任何方式创建视图、子视图、其他视图控制器以及这些对象之间的任何连接。当然,这意味着您还负责对所创建的对象进行内存管理。如果您的子类重写了-loadView,那么应该使用nil对nibName和bundle进行初始化。资料来源:是的,你是对的,我快速查看了文档,这是正确的。为了安全起见,只有在使用方法时,我才尝试使用initWithNibNamed:method。我已经更新了我的答案。我正在合成窗口,但为什么我需要自己创建它呢?-我之所以问这个问题,是因为苹果的演示项目没有做到这一点。这取决于你是通过编程方式创建所有内容,还是使用笔尖中的窗口。如果没有在nib中使用窗口,则需要按照Sulthan的建议以编程方式创建窗口。
hoverViewController=[[BDHoverViewController alloc] initWithHoverStatusStyle:BDHoverViewStatusActivityProgressStyle];
self.window.rootViewController=hoverViewController;
[self.window makeKeyAndVisible];
self.window.rootViewcontroller=controller;
[self.window makeKeyAndVisible];