我有一个键盘配件视图,我在我的应用程序中附加到键盘,以提供可切换的替代输入视图。一切都运行良好,但在微调应用程序性能的过程中,我意识到当只需要一个时,我正在创建数百个附件视图副本。所以我实现了一个简单的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;
}
我能想到的唯一另一个变化是我将一些代码从键盘附件viewcontroller的viewDidLoad方法移动到它的viewWillAppear方法。基本上它只是将视图的高度固定为44。
现在的问题是显示带有附件视图的键盘的第一个(也是唯一的第一个)键盘本身很好但是附件视图没有显示在屏幕和键盘的背景上(灰色半透明的iOS7)填充键盘本身上方的所有屏幕。我怀疑由于某种原因,附件正被绘制在屏幕顶部正上方,而键盘正在填充剩余的空间,但我在调试时看不到。
在我实施单件模式之前,配件工作正常。如果我在键盘启动时旋转iPad,它会完美地重绘自己。每次键盘显示后,它都能完美运行。
答案 0 :(得分:0)
这里写出问题是一个非常宣泄的过程!问题与viewWillAppear中的框架设置有关,而不是viewDidLoad。将帧设置代码移回viewDidLoad(保留viewWillAppear的其余部分)将问题排序。