我有两个用于自定义视图的笔尖,一个用于iPhone,一个用于iPad。使用iPad时,没有问题,一切都按预期工作。
问题出在iPhone上。当我开始初始化此视图时,它会崩溃,因为其中一个子视图(ZBarReaderView
的子类)在检查时实际上是UIView
。
我比较了两个笔尖的源代码,除了iPad特定的东西外,它们是完全相同的。
接口
@interface BarcodeScannerView : UIView <ZBarReaderViewDelegate>
@property (strong, nonatomic) IBOutlet ZBarReaderView *readerView;
+ (BarcodeScannerView*)scannerViewIPad:(BOOL)ipad;
-(void)start;
@end
实施
+ (BarcodeScannerView*)scannerViewIPad:(BOOL)ipad {
NSString* nibName = [NSString stringWithFormat:@"BarcodeScannerView%@", ipad ? @"" : @"_iPhone"];
NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:0];
BarcodeScannerView *view = (BarcodeScannerView*)nibs[0];
// this is the problem child
view.readerView.readerDelegate = view;
view.isIpad = YES;
return view;
}
在上面实例化view
之后设置断点,我检查子视图:
> po [view subviews]
<__NSArrayM 0x14f177f80>(
<UIView: 0x14df391e0; frame = (17 83; 286 401); autoresize = W+H; layer = <CALayer: 0x14dfea520>>,
<UIImageView: 0x14df39350; frame = (37 147; 246 275); autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x14df47000>>,
<UIButton: 0x14df38d50; frame = (20 20; 48 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x14dfbdc80>>
)
在iPad上检查,给出相同的堆栈,但顶部UIView
是正确的ZBarReaderView
。
我尝试重新启动XCode,断开插座并重新连接,重命名插座。我已经验证了nib名称是否正确并验证了nib文件的名称。最初,我有一个用init
方法解压缩nib的逻辑,转而使用上面显示的方法也不起作用。以前有人有这个问题吗?它只是没有任何意义为什么在IB中具有子类和接口中的匹配子类的视图完全忽略子类
修改 下面分别是iPhone和iPad笔尖的图像,并且选择了有问题的视图