2011-12-30 62 views
0

看一些其他問題,這是我在實現自定義鍵盤的視圖的.m中實現的代碼。無法將自定義視圖從nib加載到以編程方式製作的另一個視圖中?

- (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:]:這個類不是密鑰值編碼兼容的密鑰視圖」

當我在實際的視圖控制器中加載筆尖時,它工作正常。但是,正如上面所證明的,當我嘗試將其加載到另一個視圖中時,它不起作用。

此外,在筆尖,我的文件所有者的類設置的UIViewController,它連接到主視圖,因爲這是其他什麼問題,SO指示。我不確定是否需要修改這個,因爲我在另一個視圖中添加了自定義視圖而不是viewc控制器。

感謝

編輯:

的視圖實現了鍵盤的.h

@interface EquationTextField : UIView <KeyInput> { 

FormulaKeyboard *keyboard; 

} 

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

回答

2

xib裏面,如果你ctrl + clickFile's Owner你很可能會看到您有連接到在xib頂級view對象view出口。

enter image description here

  1. IBOutlet在你的代碼
  2. 指在Interface Builder對象

這個工作的UIViewController內部的原因是,UIViewController有一個屬性view其在加載xib時連接起來。

A UIView子類通常不會有一個名爲view的屬性,因此您會得到一個異常。

好像你從loadNibNamed:owner:options:方法返回的頂級對象數組中抓取物品,在xib中不需要此連接。因此,您可以斷開xib文件中的此連接。

或者

,你可以:

  • 更改File's Owner類的類自定義視圖。
  • inputViewIBOutlet
  • 連接inputView您的自定義鍵盤在xib
  • 就用

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

我刪除了廈門國際銀行的連接。它現在運行良好,但是當我單擊視圖時,鍵盤不顯示。我已經添加了應該提出問題的鍵盤的代碼。謝謝 – Mahir 2011-12-30 05:40:25

+0

我試着添加不同的視圖作爲inputView,甚至擺脫了inputView屬性,但鍵盤根本沒有出現。 – Mahir 2011-12-30 05:43:38

+0

如果這個'self.inputView = keyboard;'是應該調出鍵盤的代碼,它不會做你的想法。這只是將'keyboard'分配給名爲'inputView'的ivar,您還需要將其添加到視圖層次結構中,例如'[self addSubview:keyboard];' – 2011-12-30 05:44:52

0

好像你的觀點沒有一個叫「inputView」屬性,因此,當您設置該屬性上自我,你會得到例外。

相關問題