我在Xcode中创建了一个新项目作为单视图iOS应用程序。我创建了一个名为WebView的自定义类,扩展了UIWebView。在故事板中,我将一个WebView添加到ViewController,然后在ViewController.h中为WebView创建一个IBOutlet。我没有使用UIWebView类作为IBOutlet,而是使用我的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中进行交叉导入?
答案 0 :(得分: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
答案 1 :(得分:2)
您无需导入标头即可进行简单参考。相反,您可以使用
声明该类@class WebView;
在界面中,这足以让编译器创建一个Outlet。当您想要访问该类的属性或方法时,您只需要完整的标题。