2010-06-07 78 views
0

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

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

回答

1

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

[theMap addSubView:dataTag.view]; 

此外,你有一个其中有您的视图中创建一个DataTagViewController.xib文件?如果你不这样做,你需要创建一个并使用UIViewControllerinitWithNibName:bundle方法。否则,您将不得不实施loadView方法,而是通过代码提供您自己的视图。

编辑

你的初始化函数使用类作为一个变量的名称。这可能不会起作用。使用默认签名:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) 
    { 
    } 
} 

如果您没有做任何超越init函数的任何操作,则不需要实现此方法。你的alloc/init语句就足够了。

对于一个很好的教程,请阅读文档中的View Controller Programming指南。

+0

感谢您的协助 - 请参阅我上面编辑的 – Brodie 2010-06-07 02:41:21

+0

- (id)initWithNibNamed:(NSString *)DataTagViewController bundle:bundle ....您不希望变量名称与类名称相同。 – typeoneerror 2010-06-07 05:09:43

+0

太棒了 - 我得到了创建的对象,没有崩溃,但数据标记在视图中仍然不可见。 – Brodie 2010-06-07 23:55:14

0

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

+0

也许我做的都是错的 - 我真正想要的是能够创建一个包含5个uilabels的视图(称为datatag),我需要能够不断修改数据。 我创建一个名为DataTagViewController的UIViewController类,然后设计了DataTagViewController.xib。 – Brodie 2010-06-07 02:53:30

相关问题