2012-02-17 4 views
5

Я сделал новый проект как приложение iOS Single View в Xcode. Я создал собственный класс с именем WebView, расширяющий интерфейс UIWebView. В раскадровке я добавляю WebView в ViewController, а затем создаю IBOutlet для WebView в ViewController.h. Вместо использования класса UIWebView для IBOutlet, я использую свой класс Cusom WebView и импортирую его заголовочный файл в ViewController.h. Теперь мой ViewController подключен к Web VIew класса WebView.Как справиться с перекрестным импортом?

Далее, я хочу, чтобы мой WebView имел ссылку на UIViewController. Затем я импортирую ViewController.h в свой WebView.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; 

В интерфейсе этого будет достаточно, чтобы компилятор создал выход. Вам нужен только полный заголовок, если вы хотите получить доступ к свойствам или методам класса.

Смежные вопросы