2012-09-24 75 views
10

我在textView的inputAccessoryView属性中使用工具栏。当键盘显示时,它会按预期显示工具栏。当设备旋转时,我想删除工具栏。我试过了:如何在不关闭键盘的情况下隐藏inputAccessoryView

myTextView.inputAccessoryView.hidden = !layoutIsPortrait; 

这确实会隐藏工具栏,但会留下较高键盘的轮廓。键盘显然仍然大小适合工具栏。它看起来很糟糕,并且会干扰潜在响应者的碰触事件。

myTextView.inputAccessoryView = nil; 

只有当我resignFirstResponder,然后becomeFirstResponder再次工作。这是不可接受的。我丢失了textView的光标位置和内容,键盘闪烁而出。

[myTextView.inputAccessoryView removefromSuperview]; 

什么都不做。 我保存在伊娃工具栏的引用,并解决该相反,

[myIvarReference removeFromSuperview]; 

这样的作品,但同样在键盘的较高轮廓依稀可见。这次它不会影响其他视图的触动。所以现在这是一个可行的解决方案,但在视觉上无法接受。 我还可以尝试显示并隐藏inputAccessoryView吗?

Screenshot-键盘上方的微弱线是被去除的工具栏

Rotated keyboard with toolbar removed

+0

你介意发布一个屏幕截图,指出“高键盘轮廓”的意思吗?我觉得你提到的解决方案应该可以工作(至少其中之一),但我不确定什么是美观上可以接受的... – geraldWilliam

+0

我添加了截图的特写 –

+0

我无法测试它现在,但没有myTextView.inputAccessoryView.frame = CGRectZero做你想要的? – geraldWilliam

回答

2

从来没有发现一种方法来改变键盘的帧的残余。最终决定放弃inputAccessoryView,直接将我的工具栏作为子视图添加到视图中,并直接与键盘一起为它自己制作动画。这保持了两个独立,所以,没有更多的线。

23
myTextView.inputAccessoryView = nil; 
[myTextView reloadInputViews]; 

这会从视图中移除工具栏并重新加载视图。这样您就不需要调用resignFirstResponder并成为FirstResponder。此外,这仍然会保持你的光标位置和内容。

+1

谢谢。我正在寻找这个。这应该是被接受的答案。 1起! – karim

4

对我来说,埃里克的解决方案从来没有真正重置框架或触摸区域。据推测,这是苹果如何处理事情的一个错误。不过,我找到了一个解决方法,为我解决了这个问题。当我设置一个新的inputAccessoryView没有一个框架,reloadInputViews工作得很好:以上

myTextView.inputAccessoryView = [[UIView alloc] initWithFrame: CGRectZero]; 
[myTextView reloadInputViews]; 
2

的答案都不是,我和reloadInputViews是导致怪异的问题开展工作。最后,我得到了它的显示和隐藏,并通过做具有触摸直通:

隐藏它:

[textview.inputAccessoryView setHidden:YES]; 
[textview.inputAccessoryView setUserInteractionEnabled:NO]; 

表现出来:

[textview.inputAccessoryView setHidden:NO]; 
[textview.inputAccessoryView setUserInteractionEnabled:YES]; 
0

Xamarin代码

Control.InputAccessoryView = new UIView(CGRect.Empty); 
Control.ReloadInputViews(); 
+0

一般而言,答案应该不仅仅包含一段代码,就像解释其原因的解释一样。 –

+0

这只是jungziege的答案重写为xamarin .................................. – shane

+0

然后归因于你的答案因此,“将Jungziege的答案转换为C#和Xamarin会得到......”特别是在您的答案建立在其他人的答案中时,回答它也很有用也很有礼貌。 –

0

基础的在埃里克·阿佩尔的回答:

myTextView.inputAccessoryView = nil; 
[myTextView reloadInputViews]; 
hideInputAccessoryView = YES; 

进一步修改:

- (BOOL)canBecomeFirstResponder 
{ 
    BOOL showInputAccessoryView = YES; 

    if (hideInputAccessoryView) 
     showInputAccessoryView = NO; 

    return showInputAccessoryView; 
} 

这应该隐藏InputAccessoryView即使键盘辞职。

0

奇怪的是,这些方法都不适用于我的情况。

我有一个searchcontroller,它弹出一个标准的Apple iOS键盘,如果选择了一个特定的搜索范围,并且一个自定义键盘视图的集合视图作为输入字段的情况下,其他范围被选中。 在这两种情况下,显示输入视图时都会在屏幕上绘制不希望的附件视图。

所以,

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 = @[]; 
0
mTextView.inputAccessoryView = [[UIView alloc] initWithFrame:CGRectZero]; 
[mTextView reloadInputViews]; 

为我工作,设置inputAccessoryViewnil将无法​​正常工作,我只是不kn为什么。

相关问题