2012-02-17 50 views
5

我已經在Xcode中創建了一個新的項目作爲單一視圖iOS應用程序。我創建了一個名爲WebView的自定義類,擴展了UIWebView。在故事板中,我將一個WebView添加到ViewController,然後在ViewController.h中創建一個IBOutlet到WebView。我沒有爲IBOutlet使用UIWebView類,而是使用了我的cusom WebView類,並且也在ViewController.h中導入了它的頭文件。現在我的ViewController連接到類WebView的Web VIew。如何處理交叉導入?

接下來,我希望我的WebView具有對UIViewController的引用。然後我在我的WebView.h中導入ViewController.h,但後來我開始得到一些編譯器錯誤,如:

未知類型名稱'WebView';你的意思是'UIWebView'?

我猜問題是,那個ViewController.h導入了WebView.h,而WebView.h導入了ViewController.h。在Objective-C中不可能進行交叉導入?

回答

10

在WebView.h和ViewController.h,而不是導入每個文件,則應該預先聲明所需的類,然後做的.m(實現)文件內的實際進口。

WebView.h

@class ViewController; // This pre-declares ViewController, allowing this header to use pointers to ViewController, but not actually use the contents of ViewController 

@interface WebView : UIWebView 
{ 
    ViewController* viewController; 
} 

@end 

WebView.m

#import "WebView.h" 
#import "ViewController.h" // Gives full access to the ViewController class 

@implementation WebView 


- (void)doSomething 
{ 
    [viewController doSomethingElse]; 
} 

@end 
2

你並不需要導入頭做一個簡單的參考。相反,你可以聲明使用

@class WebView; 

在接口的類,這將是足以讓編譯器創建一個出口。當你想訪問類的屬性或方法時,你只需要完整的頭文件。

相關問題