使用 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 指出的那样使用 UITextView
s 委托拦截文本更改并关闭键盘。但是,我不鼓励您这样做,因为它违反了人机界面指南。 UITextView
用于编辑具有多行文本的文本,不建议截取回车键以表示除换行以外的其他内容。
如果你想要一个只有一行文本的文本字段,或者通过回车键关闭,那么你应该使用UITextField
,它也有一个委托协议UITextFieldDelegate
。这个协议有一个方法可以满足你的需要:
-(BOOL)textFieldShouldReturn:(UITextField*)textField
[textField resignFirstResponder];
return NO;
【讨论】:
好点,但是当您不能使用 ENTER 键时,如何正式完成编辑 UITextView 呢?在我的情况下,ENTER kex 显示为蓝色作为 DONE 按钮。如果我将其更改为 Enter 键,那么如何关闭该键盘? 您使用-[UITextView resignFirstResponder]
关闭键盘。只需使用其他用户操作而不是返回键即可。您可以在导航栏中添加“完成”按钮,或者在UITextField
或UITextField
的inputView
上添加“完成”按钮。例如,Safari 在编辑表单时使用此视图在键盘上方添加额外控件。
更正:您应该使用inputAccessoryView
在默认键盘上方添加一个视图。 inputView
用于替换默认键盘。
嘿,那是 COOOOOOOOOOL 人,没听说过 inputAccessoryView !!!这是我现在最喜欢的 UIKit 功能!酷!以上是关于使用 UITextView 时如何对键盘的 DONE 按钮做出反应?的主要内容,如果未能解决你的问题,请参考以下文章
iPad 上的 UIModalPresentationFormSheet。键盘出现时如何调整UITextView的高度
选择另一个 UITextView 时,如何阻止 UITextView 退出第一响应者/关闭键盘?