2012-02-17 28 views
5

私は、XcodeでシングルビューiOSアプリケーションとして新しいプロジェクトを作成しました。 UIWebViewを拡張したWebViewというカスタムクラスを作成しました。ストーリーボードでは、ViewControllerにWebViewを追加してから、ViewController.hのWebViewにIBOutletを作成します。 IBOutletにUIWebViewクラスを使用する代わりに、私は自分の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; 

コンパイラがアウトレットを作成するのに十分です。クラスのプロパティまたはメソッドにアクセスするには、フルヘッダーが必要です。

関連する問題