设置 UIKeyboard 附件视图时遇到问题

Posted

技术标签:

【中文标题】设置 UIKeyboard 附件视图时遇到问题【英文标题】:Trouble setting UIKeyboard accessory view 【发布时间】:2012-06-27 16:47:12 【问题描述】:

我有一个UIToolbar 的实例,其中包含一个UITextField。我想在它包含的UITextField 的附件视图中设置工具栏。

我这样做的方法如下:

[myTextView setInputAccessoryView:myToolbar];

当我编译并运行代码时,当我按下文本字段时,整个键盘都会消失。我特别确定我设置的是inputAccessoryView,而不是inputView。似乎整个输入视图都被替换了,没有任何明确的指示。

有人知道解决这个问题的方法吗?

【问题讨论】:

【参考方案1】:

在输入辅助视图中放置文本字段通常不太好...如果您将工具栏放在视图底部,然后使用UIKeyboardWillChangeFrameNotification 通过键盘移动工具栏,那会更好。 ..

在你看来DidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];

在您的视图控制器代码中的某处:

-(void) keyboardWillChange:(NSNotification*)notify 

    CGRect endFrame;
    float duration = [[[notify userInfo] valueForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
    [[[notify userInfo] valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&endFrame];
    endFrame = [self.view convertRect:endFrame fromView:nil];
    float y = (endFrame.origin.y > self.view.bounds.size.height ? self.view.bounds.size.height-44 : endFrame.origin.y-44);

    [UIView animateWithDuration:duration animations:^
        toolbar.frame = CGRectMake(0, y, self.view.bounds.size.width, 44);
    ];


【讨论】:

这似乎是内置消息应用程序对文本输入工具栏所做的事情。 是的,我想是的,而且它也是移动全屏滚动视图、文本视图或 Web 视图的一种简单方法,这样即使键盘覆盖它,您仍然可以滚动到最后...... 在这种情况下,是否有 endFrame 以确保我将工具栏移动到正确的方向? (键盘上来时上去,消失时上去?) 是的,endFrame 告诉您的应用无论何时移动键盘,无论是向上还是向下移动... 可能并不总是有UIKeyboardFrameEndUserInfoKey,例如当用户在 iPad 上滑动未固定的键盘时。在这种情况下,您的 endFrame 将未初始化并包含垃圾值。

以上是关于设置 UIKeyboard 附件视图时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何为输入附件视图的高度设置动画?

swift2.0中带有UIKeyboard的UIStackview

UIKeyBoard 在方向更改为横向时调整大小

输入附件视图行为异常与键盘隐藏和显示事件

解雇 UIKeyboard 在 Objective-C 中不起作用

在“nodejs”中使用“@sendgrid/mail”发送“base64”电子邮件“附件”时遇到问题