I have a view controller in Cocoa Touch that detects when the device rotates and switches between the views of the 2 view controllers it has: landscape and portrait.
I want the UIViewControllers in it to be able to access the FRRRotatingViewController, in a similar way as all UIViewControllers can access the UINavigationController they’re in.
So I created a UIViewController subclass (FRRViewController) that will have a rotatingViewController property.
I also modified FRRRotatingViewController, so it takes FRRViewControllers instead of plain UIViewControllers.
Unfortunately, when I include FRRRotatingViewController.h in FRRViewController.h (and vice versa), I seem to get into a circular import issue. I don’t know how to fix it. Any suggestions?
Here’s the code:
//
// FRRViewController.h
#import <UIKit/UIKit.h>
#import "FRRRotatingViewController.h"
@interface FRRViewController : UIViewController
@end
//
// FRRRotatingViewController.h
#import <UIKit/UIKit.h>
#import "FRRViewController.h"
@class FRRRotatingViewController;
@protocol FRRRotatingViewControllerDelegate
-(void) FRRRotatingViewControllerWillSwitchToLandscapeView: (FRRRotatingViewController *) sender;
-(void) FRRRotatingViewControllerWillSwitchToPortraitView: (FRRRotatingViewController *) sender;
@end
@interface FRRRotatingViewController : FRRViewController {
// This is where I get the error:Cannot find interface declaration for
// 'FRRViewController', superclass of 'FRRRotatingViewController'; did you
// mean 'UIViewController'?
}
@property (strong) UIViewController *landscapeViewController;
@property (strong) UIViewController *portraitViewController;
@property (unsafe_unretained) id<FRRRotatingViewControllerDelegate> delegate;
-(FRRRotatingViewController *) initWithLandscapeViewController: (UIViewController *) landscape andPortraitViewController: (UIViewController *) portrait;
-(void) deviceDidRotate: (NSNotification *) aNotification;
@end
You can use forward declarations for classes and protocols in headers in most situations to avoid circular import issues, except in the case of inheritance. In
FRRViewController.h, instead of importingFRRRotatingViewController.h, can you not make a forward declaration?