调用“reloadInputViews”后 inputAccessoryView 不会自动出现

Posted

技术标签:

【中文标题】调用“reloadInputViews”后 inputAccessoryView 不会自动出现【英文标题】:inputAccessoryView doesn't appear automatically after call "reloadInputViews" 【发布时间】:2015-09-14 06:33:46 【问题描述】:

首先,我将 UIView 命名为 MyTextEditorView 的子类,以将其 inputAccessoryView 覆盖为读写属性。

@property (retain, readwrite) UIView *inputAccessoryView;

我将 UIInputView 初始化为显示视图,然后添加一个 UIView 作为子视图;

UIInputVIew *myInputAccessoryView = [[UIInputView alloc] initWithFrame:CGRectMake(0,0,screenWidth,44)];

[myInputAccessoryView addSubview:myDisplayView];

[self setInputAccessoryView:myInputAccessoryView];

[self reloadInputViews];

并且我已经覆盖了 canBecomeFirstResponder 以返回 YES;

- (BOOL)canBecomeFirstResponder

     return YES;

当我第一次在我的 viewController1 中初始化 MyTextEditorView 并使其成为第一响应者时,inputAccessoryView 会自动出现。但是当我从这个 viewController1 推送另一个 viewController2 并返回 viewController1 时,inputAccessoryView 在成为第一响应者后不会自动出现。

但是,当我添加如下代码时:

    UIInputVIew *myInputAccessoryView = [[UIInputView alloc]  initWithFrame:CGRectMake(0,0,screenWidth,44)];

[myInputAccessoryView addSubview:myDisplayView];

[self setInputAccessoryView:myInputAccessoryView];

[self resignFirstResponder];

[self reloadInputViews];

[self becomeFirstResponder];

之后,这个inputAccessoryView无论如何都可以自动出现。但这让我很困惑,任何人都可以帮助我提出为什么inputAccessoryView不能自动出现?提前谢谢!!!

【问题讨论】:

我有什么让我困惑的地方。这个inputAccessoryView先自动出现,但是我在这个viewController的view中显示UIActionSheet后就不能正常工作了。我的测试平台是ios 8.3!也许这就是让我感到困惑的原因 【参考方案1】:

我在 iOS7 和 iOS8 上都测试了这个问题。而且我发现这是一个iOS8错误。在iOS8平台上将UIActionSheet替换为UIAlertController后,效果很好。 我猜 UIActionSheet 作为 UIView 的子类不同于 UIAlertController 作为 UIViewController 的子类,这可能与我的编辑器冲突

【讨论】:

以上是关于调用“reloadInputViews”后 inputAccessoryView 不会自动出现的主要内容,如果未能解决你的问题,请参考以下文章

[swmm]调用存储数据的“结构指针数组”

调用存储过程传递表类型参数

反射是什么?

20.16

sql怎么截取中文部分

suggest快速删除后仍然会出现下拉列表的bug解决方法