【问题标题】:iPhone Views at Runtime?运行时的 iPhone 视图?
【发布时间】:2009-03-05 17:45:32
【问题描述】:

我是 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

【问题讨论】:

    标签: iphone objective-c cocoa-touch mobile


    【解决方案1】:

    欢迎使用 iPhone SDK!

    一般来说,有两种方法可以显示任何视图。

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

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

    [window addSubview:rootController.view];
    

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

    [self.view addSubview:curImage.view];
    

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

    我应该警告你几件事: *您上面的代码泄漏了。您需要查看 Objective-C 属性的工作原理。这个网站上有很多关于它的内容。比我有时间在这里写的更多。 * 如果您在此处,请不要创建 rootView 属性。超类(UIViewController)中已经有一个。这只是“视图”。用它来保存你的根视图。

    我希望这可以帮助您入门。一开始可能会令人困惑,但你很快就会开始的!我建议在执行“真实”应用程序之前构建、重写和重新构建大量示例代码。 SDK 有很多很棒的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多