无法将自定义视图从nib加载到以编程方式创建的另一个视图中?

时间:2011-12-30 02:19:23

标签: objective-c ios view uiview

查看其他一些问题,这是我在实现自定义键盘的视图的.m中实现的代码。

- (id)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
if (self) {

    self.userInteractionEnabled = YES;

    [self addGestureRecognizer:
     [[UITapGestureRecognizer alloc] initWithTarget:self
                                             action:@selector(becomeFirstResponder)]];


   NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"FormulaKeyboard" owner:self options:nil];

    for (id object in bundle) {
        if ([object isKindOfClass:[FormulaKeyboard class]])
            keyboard = (FormulaKeyboard *)object;
    }   


    self.inputView = keyboard;





}
return self;

}

以下是出现的错误。

* 由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是键视图的键值编码兼容。'

当我在实际的视图控制器中加载nib时,它可以正常工作。但是,如上所述,当我尝试将其加载到另一个视图中时,它不起作用。

此外,在nib中,我将文件所有者的类设置为UIViewController并将其附加到主视图,因为这是另一个SO问题所指示的。我不确定是否需要修改它,因为我在另一个视图中添加自定义视图而不是viewc控制器。

由于

编辑:

.h实现键盘的视图

@interface EquationTextField : UIView <KeyInput> {

FormulaKeyboard *keyboard;

}

@property (readwrite, retain) UIView *inputView;
@end

2 个答案:

答案 0 :(得分:2)

xibctrl + click File's Owner你很可能会看到你有一个连接到顶部的view插座view中的xib级对象。

enter image description here

  1. 指代码中的IBOutlet
  2. 指Interface Builder
  3. 中的对象

    这在UIViewController内有效的原因是UIViewController有一个属性view,在加载xib时会连接起来。

    UIView子类通常没有名为view的属性,因此会出现异常。

    似乎您正在抓取loadNibNamed:owner:options:方法返回的顶级对象数组中的项目,而xib中不需要此连接。因此,您可以在xib文件中断开此连接。

    另外

    你可以:

    • File's Owner课程更改为自定义视图的课程。
    • inputView成为IBOutlet
    • inputView连接到xib
    • 中的自定义键盘
    • 然后使用

      [[NSBundle mainBundle] loadNibNamed:@"FormulaKeyboard" owner:self options:nil];
      

答案 1 :(得分:0)

您的视图似乎没有名为“inputView”的属性,因此当您在self上设置属性时,您将获得异常。