iphone视图控制器类 - 如何

时间:2010-06-07 00:46:53

标签: iphone ipad uiview uiviewcontroller

我需要创建自己的UIView类,这不是我必须要做的事情。我创建了这个类,然后在IB中布置了一个小视图(这只是我稍后需要添加数据的几个标签)。但现在我坚持如何在我的主视图中实际放置它的实例。有人能指点我的好教程吗?我对此最接近的是创建自定义tableViewCell。

DataTagViewController.m:

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


MapView.m:

    DataTagViewController *dataTag = [[DataTagViewController alloc] initWithNibNamed:@"DataTagViewController" bundle:nil];

    [theMap addSubView: dataTag.view]; <<< this line causes the crash (theMap is a UIView)

我现在在添加子视图时遇到此运行时错误: - [UIView addSubView:]:无法识别的选择器发送到实例0x470f070' 2010-06-06 21:22:08.931

2 个答案:

答案 0 :(得分:1)

UIViewController不是视图,但控制视图。如果您的DataTagViewController类扩展了UIViewController,那么您将要添加它的视图,而不是类本身:

[theMap addSubView:dataTag.view];

另外,您是否创建了包含视图的DataTagViewController.xib文件?如果不这样做,则需要创建一个并使用UIViewController的{​​{1}}方法。否则,您必须实现initWithNibName:bundle方法,而不是通过代码提供自己的视图。

修改

您的init函数使用您的类的名称作为变量。那可能行不通。使用默认sigature:

loadView

如果您没有执行init函数之外的任何操作,则无需实现此方法。你的alloc / init语句就足够了。

要获得一个好的教程,请阅读文档中的View Controller Programming指南。

答案 1 :(得分:0)

DataTagViewController的父类是什么?你说你需要创建“我自己的UIView类”,但你的例子表明你实际上想要创建UIViewController子类。 initWithNibNamed:是UIViewController方法。如果你的父母是UIView,那么“无法识别的选择器”是有道理的。