我在Cocoa Touch中有一个 View Controller ,它可以检测设备何时旋转并在其具有的两个 View Controller 的 View 之间进行切换:横向和纵向。
我希望其中的UIViewControllers
能够访问FRRRotatingViewController
,就像所有UIViewControllers
都可以访问它们所在的UINavigationController
一样。
因此,我创建了一个UIViewController
子类(FRRViewController
),该子类将具有rotatingViewController
属性。
我还修改了FRRRotatingViewController
,因此它采用FRRViewControllers
而不是普通的UIViewControllers
。
不幸的是,当我在FRRRotatingViewController.h
中包含FRRViewController.h
时(反之亦然),我似乎遇到了循环导入问题。我不知道该如何解决。有什么建议?
这是代码:
//
// 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
最佳答案
在大多数情况下,可以使用 header 中的类和协议(protocol)的前向声明,以避免循环导入问题,但在继承情况下除外。在FRRViewController.h
中,您可以不进行前向声明吗?而不是导入FRRRotatingViewController.h
?
@class FRRRotatingViewController;