如何隐藏inputAccessoryView而不closures键盘
我在textView的inputAccessoryView属性中使用了一个工具栏。 键盘显示时,按预期显示工具栏。 当设备旋转时,我想要删除工具栏。 我试过了:
myTextView.inputAccessoryView.hidden = !layoutIsPortrait;
这确实隐藏了工具栏,但留下了较高键盘的轮廓。 键盘显然仍然大小适合工具栏。 它看起来不好,并干扰潜在响应者的触摸事件。
myTextView.inputAccessoryView = nil;
只有当我resignFirstResponder,然后再成为FirstResponder。 这是不可接受的。 我丢失了textView的光标位置和内容,键盘闪烁而出。
[myTextView.inputAccessoryView removefromSuperview];
什么也没做。 我保存了一个iVar中的工具栏的引用,并解决这个问题,
[myIvarReference removeFromSuperview];
这有效,但键盘的高度轮廓再次隐约可见。 这一次它不会影响其他观点的触动。 所以现在这是一个工作的解决scheme,但在视觉上不能接受。 还有什么我可以尝试显示和隐藏inputAccessoryView随意?
屏幕截图 – 键盘上方模糊的线条是被删除的工具栏的剩余部分
myTextView.inputAccessoryView = nil; [myTextView reloadInputViews];
这将从视图中移除工具栏并重新加载视图。 这样你就不需要调用resignFirstResponder并成为FirstResponder。 另外,这仍然会保持你的光标位置和内容。
对我来说,Eric的解决scheme从来没有真正重置框架或触摸区域。 据推测,这是苹果如何处理事情的一个错误。 但是,我发现一个解决方法,为我解决了这个问题。 当我设置一个新的inputAccessoryView没有框架,reloadInputViews工作正常:
myTextView.inputAccessoryView = [[UIView alloc] initWithFrame: CGRectZero]; [myTextView reloadInputViews];
上面的答案都没有为我工作和reloadInputViews造成奇怪的问题。 最终我把它展现出来,隐藏起来,
把它藏起来:
[textview.inputAccessoryView setHidden:YES]; [textview.inputAccessoryView setUserInteractionEnabled:NO];
展示下:
[textview.inputAccessoryView setHidden:NO]; [textview.inputAccessoryView setUserInteractionEnabled:YES];
从来没有find一种方法来改变键盘的框架。 最终决定放弃inputAccessoryView,将我的工具栏直接添加到视图作为子视图,并直接与键盘一起自己animation。 这保持了两个独立,所以,没有更多的线。
Xamarin代码是
Control.InputAccessoryView = new UIView(CGRect.Empty); Control.ReloadInputViews();
基于Eric Appel的回答:
myTextView.inputAccessoryView = nil; [myTextView reloadInputViews]; hideInputAccessoryView = YES;
进一步修改:
- (BOOL)canBecomeFirstResponder { BOOL showInputAccessoryView = YES; if (hideInputAccessoryView) showInputAccessoryView = NO; return showInputAccessoryView; }
这应该隐藏InputAccessoryView,即使在键盘退出时也是如此。
奇怪的是,这些方法都不适用于我的情况。
我有一个searchcontroller,如果select了一个特定的search范围,popup一个标准的Apple iOS键盘,而在其他范围被选中的情况下,一个带有集合视图的自定义键盘视图作为input字段。 在这两种情况下,当显示input视图时,在屏幕上绘制不希望的附件视图。
所以,
self.mySearch.searchbar.inputAccessoryView = nil // did not work [self.mySearch.searhbar.inputAccessoryView setHidden:YES] // did not work self.mySearch.inputAccessoryView = nil // did not work self.mySearch.searchbar.inputAccessoryView.frame = CGRectZero //did not work [self.mySearch reloadInputViews]
及其各种组合等。
什么工作是从附件视图删除个别配件项目:
// insert after assignments of mySearch delegates UITextInputAssistantItem *junk = [self.mySearch inputAssistantItem]; junk.leadingBarButtonGroups = @[]; junk.trailingBarButtonGroups = @[];
mTextView.inputAccessoryView = [[UIView alloc] initWithFrame:CGRectZero]; [mTextView reloadInputViews];
为我工作,设置inputAccessoryView
到nil
将无法正常工作,我只是不知道为什么。