查看其他一些问题,这是我在实现自定义键盘的视图的.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
答案 0 :(得分:2)
在xib
内ctrl
+ click
File's Owner
你很可能会看到你有一个连接到顶部的view
插座view
中的xib
级对象。
IBOutlet
这在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上设置属性时,您将获得异常。