使用 UITextView 时如何对键盘的 DONE 按钮做出反应?

Posted

技术标签:

【中文标题】使用 UITextView 时如何对键盘的 DONE 按钮做出反应?【英文标题】:How to react on the DONE button of the keyboard when using a UITextView? 【发布时间】:2010-10-23 15:47:16 【问题描述】:

UITextView 不继承自 UIControl,因此不可能有 addTarget:forControlEvent: 方法。我曾经注册一个操作方法只是为了在 UIControlEventEditingDidEndOnExit 发生时辞职第一响应者。

如何使用 UITextView 做到这一点?是否有一些我必须实现的委托 + 协议才能让键盘消失?

【问题讨论】:

【参考方案1】:

是的UITextView 有一个你应该实现的委托协议。委托协议自然命名为UITextViewDelegate。您应该通过浏览文档注意到有一个模式;对于任何具有委托协议的类Foo,协议始终命名为FooDelegate,也不例外。

现在您可以像 James 指出的那样使用 UITextViews 委托拦截文本更改并关闭键盘。但是,我不鼓励您这样做,因为它违反了人机界面指南。 UITextView 用于编辑具有多行文本的文本,不建议截取回车键以表示除换行以外的其他内容。

如果你想要一个只有一行文本的文本字段,或者通过回车键关闭,那么你应该使用UITextField,它也有一个委托协议UITextFieldDelegate。这个协议有一个方法可以满足你的需要:

-(BOOL)textFieldShouldReturn:(UITextField*)textField 
    [textField resignFirstResponder];
    return NO;


【讨论】:

好点,但是当您不能使用 ENTER 键时,如何正式完成编辑 UITextView 呢?在我的情况下,ENTER kex 显示为蓝色作为 DONE 按钮。如果我将其更改为 Enter 键,那么如何关闭该键盘? 您使用-[UITextView resignFirstResponder] 关闭键盘。只需使用其他用户操作而不是返回键即可。您可以在导航栏中添加“完成”按钮,或者在UITextFieldUITextFieldinputView 上添加“完成”按钮。例如,Safari 在编辑表单时使用此视图在键盘上方添加额外控件。 更正:您应该使用inputAccessoryView 在默认键盘上方添加一个视图。 inputView用于替换默认键盘。 嘿,那是 COOOOOOOOOOL 人,没听说过 inputAccessoryView !!!这是我现在最喜欢的 UIKit 功能!酷!

以上是关于使用 UITextView 时如何对键盘的 DONE 按钮做出反应?的主要内容,如果未能解决你的问题,请参考以下文章

iPad 上的 UIModalPresentationFormSheet。键盘出现时如何调整UITextView的高度

选择另一个 UITextView 时,如何阻止 UITextView 退出第一响应者/关闭键盘?

当uitextView处于焦点时如何隐藏键盘~~

当键盘可见时如何使 UITextView 一直滚动到底部

当键盘出现时,我应该如何正确设置 UITextView 的 contentInset

UIScrollView 中的 UITextView 中的键盘方向