运行时的iPhone视图?

时间:2009-03-05 17:45:32

标签: iphone objective-c cocoa-touch mobile

我是iPhone SDK的新手,我正在尝试创建3个视图并在它们之间切换。数据将来自服务器,我将基本上显示1个视图并缓存其他两个。到目前为止,我只是尝试创建一个视图并在运行时显示它。我的代码如下所示。它只显示一个空白屏幕,我想我错过了一个关键概念。任何帮助?

#import <UIKit/UIKit.h>
#import "ImageViewController.h"
@interface Test5ViewController : UIViewController 
{
    IBOutlet UIView *rootView;
    ImageViewController *curImage;
    ImageViewController *nextImage;
    ImageViewController *prevImage;
}

@property(nonatomic,retain) IBOutlet UIView *rootView;
@property(nonatomic,retain) ImageViewController *curImage;
@property(nonatomic,retain) ImageViewController *nextImage;
@property(nonatomic,retain) ImageViewController *prevImage;

@end

- (void)loadView 
{

    self.curImage = [[ImageViewController alloc]initWithNibName:@"ImageView" bundle:[NSBundle mainBundle]];
    UIImage *pic = [UIImage imageNamed:@"baby-gorilla.jpg"];
    [self.curImage assignImage:pic];
    self.rootView = self.curImage.view;

}

#import <UIKit/UIKit.h>


@interface ImageViewController : UIViewController 
{
    IBOutlet UIImageView *image;
}

-(void)assignImage:(UIImage *)screenShotToSet;


@property(nonatomic,retain) IBOutlet UIImageView *image;

@end

1 个答案:

答案 0 :(得分:2)

欢迎使用iPhone SDK!

通常,有两种方法可以显示任何视图。

首先,最常见的是,您使用Interface Builder创建的NIB文件。这通常是最简单的入门方式,我会建议你在这里尝试做什么。描述你在这里所做的所有步骤太冗长了,但基本上是通过创建一个新文件并选择“用户界面”并选择View XIB来启动xcode。这将创建一个基本的NIB文件(由于历史原因,它们被称为NIB而不是XIB)。界面构建器的第一步是将“文件所有者”的类名更改为UIViewController子类(Test5ViewController)。然后,您可以将IB允许的任何内容放入视图窗口,甚至可以用您自己的视图对象替换预先提供的视图对象。这里的诀窍是:确保视图插座(由UIViewController超类提供)连接到视图。完成此操作后,将在加载NIB时自动加载此视图。然后,您可以将您的UIViewController子类(Test5ViewController)放入您的MainWindow.xib NIB文件中,以便 it 自动加载,然后您就可以了。

现在,你在这里做的方式是第二种方式。有些人喜欢一直这样编码而不是用户界面构建器。虽然它有时是必要的并且总是更灵活,但它可以让你更好地了解发生的事情。可能还有其他的东西,但是您遗漏的主要内容是,在上面的代码中,您没有将视图添加到视图层次结构中的任何内容。您需要先检查是否有UIApplicationDelegate子类,并且需要加载“root”UIViewController类。 xcode中的所有初始项目创建类型都执行此操作(基于Window的应用程序除外)。这是代码:

[window addSubview:rootController.view];

完成此操作后,如果您的视图控制器未被NIB加载(上面简要描述),您的loadView方法将被调用,期望您构建自己的视图层次结构。上面,您创建了视图,但未能将它们放在层次结构中。你需要这样的东西:

[self.view addSubview:curImage.view];

在添加到视图层次结构之前,不会呈现任何视图。确保在文档中查找UIView类,并了解向视图层次结构添加和删除视图的各种方法。

我应该警告你一些事情: *您的上述代码正在泄露。您需要查看objective-C属性的工作方式。关于它,这个网站上有很多。我有时间在这里写一下。 *如果您有此处,请不要创建rootView属性。超类中已经有一个(UIViewController)。这只是'观点'。用它来保存根视图。

我希望这有助于您入门。一开始可能会让人眼花缭乱,但你很快就会明白!我建议您在执行“真实”应用程序之前构建并重写和重建大量示例代码。 SDK有许多很棒的样本。