2012-02-17 9 views
5

He hecho un nuevo proyecto como aplicación de iOS de vista única en Xcode. Creé una clase personalizada llamada WebView que extiende UIWebView. En el guión gráfico, agrego un WebView al ViewController y luego hago un IBOutlet a WebView en ViewController.h. En lugar de usar la clase UIWebView para IBOutlet, estoy usando mi clase cusom WebView y también estoy importando su archivo de cabecera en ViewController.h. Ahora mi ViewController está conectado a Web VIew de la clase WebView.¿Cómo se maneja la importación cruzada?

A continuación, me gustaría que mi WebView tenga una referencia al UIViewController. Luego importo el ViewController.h en mi WebView.h, pero luego empiezo a obtener algunos errores del compilador como:

Nombre desconocido del tipo 'WebView'; ¿Te refieres a 'UIWebView'?

Supongo que el problema es que ViewController.h importa WebView.h y WebView.h importa ViewController.h. ¿No es posible hacer una importación cruzada en Objective-C?

Respuesta

10

En WebView.h y ViewController.h, en lugar de importar cada archivo, en su lugar debe predefinir las clases necesarias, luego realizar la importación real dentro de los archivos .m (implementación).

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

No es necesario importar la cabecera para hacer una simple referencia. En su lugar se puede declarar la clase utilizando

@class WebView; 

En la interfaz, esto será suficiente para que el compilador para crear una salida. Solo necesita el encabezado completo cuando desee acceder a las propiedades o métodos de la clase.

Cuestiones relacionadas