我有一個鍵盤附件視圖,我將其附加到我的應用程序中的鍵盤以提供可切換的替代輸入視圖。一切工作都正常,但在爲應用程序進行微調性能的過程中,我意識到當真正需要一個時,我正在創建數百個配件視圖副本。所以我實現了一個簡單的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,它會完美重繪。每次鍵盤顯示之後,它都能正常工作。