当要求 用户 在iOS应用程序中 输入 数据时,比如 用户 触摸 文本框 或者 文本视图后,iPhone键盘 会自动出现 在屏幕上。根据 我们使用iPhone的经验,当用户 在文本框 或者 文本视图中 输入完 内容 并且 触摸 文本框 或 文本视图边界以外的区域后,iPhone键盘 会自动 隐藏起来。但是 在上一篇博文中的iOS应用程序里 你 会发现 无论 你 怎样触摸 文本框边界以外的区域,iPhone键盘 都不会自动 隐藏起来。事实上 开发者 需要编写 一些代码 来实现 隐藏iPhone键盘的功能。
创建 应用程序
我们 先启动 Xcode,然后 创建 一个新的Single View Application(单视图应用程序),接着 将 产品名称 和 物件类型名称前缀 都设定为 hideKeyboard。创建好 应用程序过后,我们 点击 hideKeyboardViewController.xib这个文件 将 用户界面 载入 界面创建器。接着 我们 从物件库中 拖 一个Text Field(文本框)物件 放 到视图里你认为美观的位置。接着 我们 需要创建 一个UITextField(文本框)类型的物件 并且 使 其 包含 在每个hideKeyboardViewController类型的物件当中。我们 点击 hideKeyboardViewController.h这个文件 并且 将 其 修改成 下面这样:
这样过后 每个hideKeyboardViewController类型的物件 都包含 一个UITextField类型的物件myTextField。接着 我们 需要生成 myTextField 和 setMyTextField:这两相措施,于是 我们 在 hideKeyboardViewController.m这个文件当中的@implementation命令后面 加上 这行语句:
然后 我们 需要将 hideKeyboardViewController类型的物件所包含的myTextField这个物件 与 hideKeyboardViewController.xib这个文件中的文本框物件:
连接起来。具体的方法 在这里 就不再赘述了。
在用户 触摸 文本框边界以外的区域后 隐藏 键盘
接下来 我们 要建立 隐藏键盘的机制,这 需要 在用户 触发 某项事件后 执行 某项措施 来办到。我们 先编写 一项适用于hideKeyboardViewController这类物件的措施backgroundTouched:。首先 在hideKeyboardViewController.h这个文件中的@end命名之前 添加 这行语句:
并且 在hideKeyboardViewController.m这个文件 添加 backgroundTouched:这项措施的具体内容:
编写好 backgroundTouched:这项措施后 我们 必须确保 用户 在触摸 文本框边界以外的区域后 这项措施 能够得到 执行。在默认的情况下 文本框边界以外的区域 属于 视图,也就是 UIView类型的物件,所以 如果 用户 触摸 文本框边界以外的区域,那么 被触摸的物件 就是 UIView类型的物件。不幸的 是 单纯的UIView类型物件 无法 在用户 触摸后 触发 任何事件。于是 我们 必须把 hideKeyboardViewController.xib这个文件中的视图物件 由UIView类型 修改为 UIControl类型。我们 按住 键盘上的control键 用 鼠标 点击 下面这个面板中的View图标:
然后 我们 会看到 这样的对话框:
从这个对话框中 我们 可以看到 hideKeyboardViewController.xib这个文件中的视图物件View 与 每个hideKeyboardViewController类型物件所包含的view这个物件 属于 同一物件。点击 View这个视图物件后 再 找到 Xcode主窗口右边面板中的连接身份查看器:
在这里 我们 可以看到 View这个视图物件 属于 UIView类型。我们 点击 这里的倒三角后 会弹出 一个下拉菜单,在下来菜单当中 我们 选择 UIControl:
从而 将 hideKeyboardViewController.xib这个文件中的视图物件View 由UIView类型 改为了 UIControl类型。当然 UIControl类型的物件 也是 包含 在UIView类型当中的。
现在 还是 选择 视图物件View,我们 在Xcode主窗口右边面板中的连接查看器当中 可以看到 用户 对这时的视图物件View 可以触发 下面这些事件了:
我们 点击 Touch Down这项事件右端的灰色小圆圈 不放,将 鼠标 一直 拖 到File’s Owner图标:
然后 松开 鼠标,在弹出的菜单中 选择 我们已经编写好的backgroundTouched:这项措施:
最后 我们 编译 并且 运行 这个应用程序。在这个应用程序当中 我们 点击 文本框后,iPhone键盘 就会自动 弹出来,然后 点击 文本框以外的区域,iPhone键盘 就会隐藏起来。
在backgroundTouched:这项措施当中 我们 对文本框 采取了 resignFirstResponder这项措施,这项措施 能使 iPhone键盘 隐藏起来;与此相反,如果 我们 对文本框 采取becomeFirstResponder这项措施,效果 就跟 我们用手指触摸文本框 是 一样的,那就是 使 iPhone键盘 弹出来。