2013-09-23 122 views
0

我有一個鍵盤附件視圖,我將其附加到我的應用程序中的鍵盤以提供可切換的替代輸入視圖。一切工作都正常,但在爲應用程序進行微調性能的過程中,我意識到當真正需要一個時,我正在創建數百個配件視圖副本。所以我實現了一個簡單的Singleton模式。鍵盤附件視圖覆蓋整個屏幕

+ (v2KeyboardAccessory*) sharedInstance 
{ 
    static dispatch_once_t pred; 
    static v2KeyboardAccessory* theObject = nil; 

    dispatch_once(&pred, ^{ theObject = [[self alloc] init]; }); 
    return theObject; 
} 

在創建我的subviewcontroller的(這是複雜的),我設置TextView的附屬視圖,並保持一個參考(爲方便起見)。

v2KeyboardAccessory *newAccessory = [v2KeyboardAccessory sharedInstance]; 
self.inputAccessory = newAccessory; 
self.textView.inputAccessoryView = newAccessory.view; 

以我subviewcontroller的textViewShouldBeginEditing方法我設置subviewcontroller作爲當前委託(對於像切換輸入視圖和處理幾個關鍵方法撤消進程)。

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
    self.inputAccessory.delegate = self; 
    self.inputAccessory.undoManager = self.textView.undoManager; 
    // Some code to set which input view to display initially, etc 
    return YES; 
} 

我能想到的唯一的其他變化是,我從移動鍵盤附件視圖控制器的viewDidLoad方法,一些代碼的方法viewWillAppear中。基本上它只是將視圖的高度修正爲44.

現在的問題是第一個(也是唯一的第一個)帶有配件視圖的鍵盤顯示時,鍵盤本身很好,但附件視圖未顯示在屏幕和鍵盤的背景(iOS7的灰色半透明)填充了鍵盤本身上方的所有屏幕。我懷疑由於某種原因,配件正在屏幕頂部上方繪製,並且鍵盤正在填充剩餘空間,但在調試過程中我看不到這一點。

配件在我實施單件模式之前完美運行。如果我在鍵盤彈起的同時旋轉iPad,它會完美重繪。每次鍵盤顯示之後,它都能正常工作。

回答

0

原來在這裏寫的問題是一個非常通情達理的過程!這個問題與viewWillAppear中的frame的設置有關,而不是viewDidLoad。將框架設置代碼移回到viewDidLoad(留下viewWillAppear的其餘部分)將問題排除。