Nib没有正确加载视图

时间:2015-11-13 18:32:04

标签: ios objective-c iphone xib nib

我有两个用于自定义视图的笔尖,一个用于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笔尖的图像,并且选择了有问题的视图

iphone

ipad

0 个答案:

没有答案