0

我有一个键盘附件视图,我将其附加到我的应用程序的键盘上,以便提供可切换的替代输入视图。一切工作正常,但在为应用程序微调性能的过程中,我意识到我正在创建数百个附件视图副本,而实际上只需要一个。所以我实现了一个简单的单例模式。

+ (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,它会完美地重绘自己。每次键盘显示之后它都能完美运行。

4

1 回答 1

0

原来在这里写问题是一个非常宣泄的过程!与在 viewWillAppear 而不是 viewDidLoad 中设置框架有关的问题。将框架设置代码移回 viewDidLoad(保留 viewWillAppear 的其余部分)解决了问题。

于 2013-09-23T01:48:58.897 回答