如何在iOS 8中使用inputAccessoryViewController

6
在iOS 8中,苹果公司在UIResponder下引入了一个名为inputAccessoryViewController的新属性。然而,至今没有文档说明如何使用它。
此外,在iOS 8中,设置UIViewController子类的inputAccessoryView属性并使子类成为第一响应者似乎会导致视图控制器泄漏。
我的问题是:我如何在UIViewController子类中使用inputAccessoryViewController?这是否解决了内存泄漏问题?

你在自定义的 UIViewController 子类中使用了 UIInputViewController 作为 inputAccessoryViewController,但其中一个没有被释放? - Francescu
请展示实际的代码。 - matt
2个回答

1
如果您想使用inputAccessoryViewController,您需要子类化任何UITextView或UITextField控件并覆盖inputAccessoryViewController属性的读写。
@interface MyTextView: UITextView

@property (nonatomic, retain) UIInputViewController *inputAccessoryViewController;

@end

请注意,你提供的视图控制器应该是UIInputViewController(这将让你访问输入代理和文本文档信息),如果你调用[super loadView],它将创建“inputView”(作为self.view),你可以在其中添加子视图。这个UIInputView将被适当地设计成键盘模式。我还没有尝试过在这种情况下从.xib加载。
我还发现要正确调整inputView的大小(避免一堆约束错误),我添加了以下代码
- (void)updateViewConstraints
{
    self.view.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.superview.frame), myAccessoryHeight);
    [super updateViewConstraints];
}

-2
在你的代码中添加这个方法。这会对你有所帮助。从iOS 7开始,你需要将UIView作为accessoryView返回。
-(UIView *)inputAccessoryView{ 
       UIView  *accessoryView = [[UIView alloc] initWithFrame:toolView.frame];
      toolView.frame = CGRectMake(0, 0, self.view.frame.size.width, 50);  
      [accessoryView addSubview:toolView];  
      return accessoryView; 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接