iOS UIToolBar 隐藏在键盘上

Posted

技术标签:

【中文标题】iOS UIToolBar 隐藏在键盘上【英文标题】:iOS UIToolBar gets hidden on Keyboard 【发布时间】:2014-08-16 06:42:40 【问题描述】:

在底部的 ViewController 中,我有一个 UIToolBar (myToolbar),其中我有一个 UITextField (messageTxt) 和一个按钮。当我尝试在 messageTxt 上写任何东西时,键盘会出现,但它会隐藏工具栏。因此,在我不关闭键盘之前,我不知道我输入了什么。 我正在寻找,当我开始打字时,我应该能够看到我正在输入的内容。为此,也许可以缩小视图并在下面添加键盘,或者如何实现。

对于其他网站,我实现了以下内容,但看不到我正在输入的内容。我可以在输入时看到建议,但看不到我正在输入的内容。你能帮我知道我哪里出错了。我的代码是:-

在我的 viewDidLoad 方法中,为键盘添加了这两个通知。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

[super viewDidLoad];

通知方法的实现。

-(void) keyboardWillShow: (NSNotification *) notification 
    UIViewAnimationCurve animationCurve = [[[notification userInfo] valueForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
    NSTimeInterval animationDuration = [[[notification userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    CGRect keyboardBounds = [(NSValue *) [[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationCurve:animationCurve];
    [UIView setAnimationDuration:animationDuration];
    [self.myToolBar setFrame:CGRectMake(30.0f, self.view.frame.size.height - keyboardBounds.size.height - self.myToolBar.frame.size.height,    self.myToolBar.frame.size.width, self.myToolBar.frame.size.height)];
    [UIView commitAnimations];



-(void) keyboardWillHide: (NSNotification *) notification 
    UIViewAnimationCurve animationCurve = [[[notification userInfo] valueForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
    NSTimeInterval animationDuration = [[[notification userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    CGRect keyboardBounds = [(NSValue *) [[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationCurve:animationCurve];
    [UIView setAnimationDuration:animationDuration];

    [self.myToolBar setFrame:CGRectMake(0.0f, self.view.frame.size.height - 46.0f, self.myToolBar.frame.size.width, self.myToolBar.frame.size.height)];
    [UIView commitAnimations];


最后添加了这个 TextDelegate 方法,以便知道它何时有焦点。

-(void) textFieldDidBeginEditing:(UITextField *)textField 

   //[self.messageTxt setInputAccessoryView:self.myToolBar];

我在哪里出错或我的代码中缺少什么? 还有一点,我希望实现 TextView inlace of TextField - 因为我想要多行输入。我相信这是可能的,并且通过 TEXtView 的上述实现也不会有任何问题。是在 View 中添加 TextView 和 Button 而不是 ToolBar 更好的选择,还是可以使用 ToolBar 很好地管理?有什么更好的选择?

非常感谢任何帮助。谢谢。

【问题讨论】:

【参考方案1】:

查看 didload 方法放代码:

txtfield.inputAccessoryView = (Instance of your UIToolbar)

上面写的其他代码都可以。您应该在键盘出现之前设置 AccessoryView,以便在打开键盘时显示工具栏。

【讨论】:

我在 viewDidLoad 方法中添加了上面的行,我得到了约束错误:- 无法同时满足约束。以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) ......我正在使用AutoLayout。上面的 ToolBar 是 TableView & 有 TableView & ToolBar 的水平空间、垂直空间、Leading、Trailing 对齐设置的约束。它们都等于 0。 我有垂直空间 - 视图 - 工具栏和垂直空间 - 底部布局指南 - 我认为可能会导致问题的工具栏。两者的值都设置为 0。我添加了一个 NSLayoutConstraint kbHeight 并设置为 View-Toolbar 约束。尝试使其 = 0。尝试将其设置为0并将kbHeight设置为底部布局指南-工具栏约束并使其 = 0。但是所有尝试都给出了相同的结果-相同的错误并且什么都没有在屏幕上看到。在代码中,不是设置 myToolbar setHeight,而是更改了约束值。如果两个约束都不起作用,我必须设置哪个约束??? 请指导一下。 我添加了 self.messageTxt.inputAccessoryView = self.myToolBar;我在这里做错了吗 - messageTxt 仅在 myToolBar 中。这是正确的??? 在您的文本字段实例上,您需要设置工具栏。例如:UITextfield *tf;你可以设置,tf.inputAccessoryView = self.myToolbar.

以上是关于iOS UIToolBar 隐藏在键盘上的主要内容,如果未能解决你的问题,请参考以下文章

更改条形色调颜色使模糊区域变为黑白

在 Xcode 4.3 中的键盘上放置一个 UIToolbar

iOS为数字键盘增加完成按钮

用键盘iOS8移动UIToolbar

在 Swift 中关闭键盘时,UIToolbar 不再显示在视图中

隐藏 uitoolbar 在视图和标签栏之间留下空隙