Xcode 界面生成器/跨平台中的自定义UIView

Xcode 界面生成器/跨平台中的自定义UIView,xcode,cocoa-touch,cocoa,interface-builder,Xcode,Cocoa Touch,Cocoa,Interface Builder,我有一个用于iOS和Mac OS的控制库。具体实施如下: #if TARGET_OS_IPHONE #import <UIKit/UIKit.h> @interface MyCustonControl : UIControl ... @end #else #import <Cocoa/Cocoa.h> @interface MyCustomControl : NSControl ... @end #endif #如果目标是IPHONE #进口 @接口MyCu

我有一个用于iOS和Mac OS的控制库。具体实施如下:

#if TARGET_OS_IPHONE

#import <UIKit/UIKit.h>

@interface MyCustonControl : UIControl
...
@end

#else

#import <Cocoa/Cocoa.h>

@interface MyCustomControl : NSControl
...
@end

#endif
#如果目标是IPHONE
#进口
@接口MyCustonControl:UIControl
...
@结束
#否则
#进口
@接口MyCustomControl:NSControl
...
@结束
#恩迪夫
如果我在视图控制器中构建控件,这将很好地工作。如果我尝试使用Interface Builder,我永远无法将UIView的自定义类设置为MyCustomControl。它显示在列表中,我可以输入它,但是如果我聚焦其他内容,然后再次聚焦视图,自定义类已恢复为UIView

我在两种实现中都实现了initFromCoder,只是为了确保它不是这样


有办法解决这个问题吗?是IB很奇怪还是我应该以不同的方式定义我的类?

您不能将自定义类设置为控件,因为自定义类需要是UIView/NSView的子类,而UIControl/NSControl是UIView/NSView的父类。您应该将您的定义更改为

@interface MyCustomControl : UIView
...
@interface MyCustomControl : NSView

无法将自定义类设置为控件,因为自定义类需要是UIView/NSView的子类,而UIControl/NSControl是UIView/NSView的父类。您应该将您的定义更改为

@interface MyCustomControl : UIView
...
@interface MyCustomControl : NSView