2010-06-07 53 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