http://blog.csdn.ofcdn.net/ch_soft/article/details/6948119
- - (void)registerForKeyboardNotifications
- {
- //添加自己做为观察者,以获取键盘显示时的通知
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(keyboardWasShown:)
- name:UIKeyboardDidShowNotification object:nil];
- //添加自己做为观察者,以获取键盘隐藏时的通知
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(keyboardWasHidden:)
- name:UIKeyboardDidHideNotification object:nil];
- }
-
- // 键盘出现时调用此方法
- - (void)keyboardWasShown:(NSNotification*)aNotification
- {
- //如果键盘是显示状态,不用做重复的操作
- if (keyboardShown)
- return;
-
- //获得键盘通知的用户信息字典
- NSDictionary* info = [aNotification userInfo];
-
- // 取得键盘尺寸.
- NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
- CGSize keyboardSize = [aValue CGRectValue].size;
-
- // 重新设置scrollView的size
- CGRect viewFrame = [myScrollView frame];
- viewFrame.size.height -= keyboardSize.height;
- myScrollView.frame = viewFrame;
-
-
- // 把当前被挡住的text field滚动到view中适当的可见位置.
- CGRect textFieldRect = [activeField frame];
- [myScrollView scrollRectToVisible:textFieldRect animated:YES];
-
-
- //记录当前textField的偏移量,方便隐藏键盘时,恢复textField到原来位置
- oldContentOffsetValue = [myScrollView contentOffset].y;
-
- //计算textField滚动到的适当位置
- CGFloat value = (activeField.frame.origin.y+myScrollView.frame.origin.y+activeField.frame.size.height - self.view.frame.size.height + keyboardSize.height)+2.0f;
-
- //value>0则表示需要滚动,小于0表示当前textField没有被挡住,不需要滚动
- if (value > 0) {
- //使textField滚动到适当位置
- [myScrollView setContentOffset:CGPointMake(0, value) animated:YES];
- isNeedSetOffset = YES;//更改状态标志为需要滚动
- }
-
- //更改键盘状态标志为已显示
- keyboardShown = YES;
- }
-
-
- // 键盘隐藏时调用此方法
- - (void)keyboardWasHidden:(NSNotification*)aNotification
- {
-
-
- NSDictionary* info = [aNotification userInfo];
-
- // Get the size of the keyboard.
- NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
- CGSize keyboardSize = [aValue CGRectValue].size;
-
- // Reset the height of the scroll view to its original value
- CGRect viewFrame = [myScrollView frame];
- viewFrame.size.height += keyboardSize.height;
- myScrollView.frame = viewFrame;
-
- //如果状态标志为需要滚动,则要执行textFiled复位操作
- if (isNeedSetOffset) {
- //oldContentOffsetValue记录了textField原来的位置,复位即可
- [myScrollView setContentOffset:CGPointMake(0, oldContentOffsetValue) animated:YES];
- }
-
- //复位状态标志
- isNeedSetOffset = NO;
- keyboardShown = NO;
- }
分享到:
相关推荐
除了上述方法,我们还可以使用Auto Layout来处理键盘遮挡问题。为`UITextField`设置约束,使其底部距离父视图的安全区域有一定的间距,这样当键盘弹出时,布局系统会自动调整`UITextField`的位置。 总之,通过监听`...
2. **键盘管理**:学习如何使用`UITextField`的代理方法(如`textFieldShouldReturn:`)或UIKeyboardNotifications来监听并控制键盘的显示和隐藏。 3. **自定义工具栏**:理解如何使用`UIInputView`或`UIToolbar`...
遵循这个协议的类可以接收到`UITextField`的各种事件,如文本改变(`textField:shouldChangeCharactersIn:replacementString:`)、文本结束编辑(`textFieldDidEndEditing:`)等,这使得我们可以对用户输入进行验证或...
通过以上策略,开发者可以根据项目需求选择合适的方法来处理iOS 7中的键盘遮挡问题。在实际应用中,可能会结合使用多种方法,以提供最佳用户体验。在提供的KayBoardDemo项目中,可能包含了实现这些解决方案的示例...
`UITextField+BlockDemo` 是一个示例项目,它展示了如何通过扩展`UITextField` 类并使用Blocks(block语法)来增强其功能,使得在处理用户输入事件时更加灵活便捷。这个项目的核心就是将传统的Delegate模式与Blocks...
然而,在某些场景下,开发者可能希望`UITextView`具备`UITextField`的一些特性,比如,限制输入字符数、设置 placeholder 或者实现简单的键盘返回事件处理。本篇文章将详细探讨如何通过自定义`UITextView`来实现`...
通过上述方法,我们可以创建一个名为“完美Demo”的应用示例,它演示了如何优雅地处理键盘弹出时输入框被遮挡的问题。这个zip文件中的代码应该包含了实现这些功能的完整示例,开发者可以参考学习并根据自己的项目...
2. **事件处理**:`UITextField`提供了诸如`textFieldDidBeginEditing:`、`textFieldDidEndEditing:`、`textField:shouldChangeCharactersInRange:replacementString:`等代理方法,可以通过实现这些方法来监听用户...
例如,可以使用`textFieldShouldReturn(_:)`方法处理回车键事件,通常用于提交表单。 在实际项目中,我们常常需要对用户输入的数据进行验证,比如限制输入长度、格式校验等。这些都可以通过代理方法或者自定义扩展...
3. 键盘的隐藏和显示:用户可能需要随时隐藏和显示键盘,这可以通过调用UITextField或UITextView的resignFirstResponder()和becomeFirstResponder()方法实现。 4. 自定义键盘的动画效果:为了提高用户体验,可以...
这个教程将重点讲解如何利用`UITextField`的代理方法来实现一个类似QQ登录窗口的功能,包括显示暗文(隐藏密码)以及添加删除小叉号。 首先,我们需要了解`UITextField`的代理协议`UITextFieldDelegate`。这个协议...
在实际项目中,我们可能还需要处理更多细节,例如错误提示、输入监听、自定义键盘等。对于复杂的验证逻辑,可以创建一个专门的验证类,将验证规则封装其中,以提高代码复用性和可维护性。 在提供的`...
`UITextField`提供了`becomeFirstResponder`和`resignFirstResponder`方法,分别用于使`UITextField`获取和失去焦点,从而显示和隐藏键盘。`textFieldShouldReturn`代理方法会在用户点击键盘上的“return”键时触发...
2. **处理键盘显示通知**:当接收到`UIKeyboardWillShowNotification`通知时,我们需要获取键盘的高度以及动画的持续时间。这些信息在通知的`userInfo`字典中,键为`UIKeyboardFrameEndUserInfoKey`和`...
总的来说,解决`UITextField resignFirstResponder`键盘不回收的问题,需要对事件处理、控制器生命周期以及可能的自定义手势冲突进行排查。同时,利用自定义类别来封装键盘隐藏操作也是一个很好的实践,可以提高代码...
可以对第二个`UITextField`进行特殊设置,如隐藏输入的字符: ```swift let passwordTextField = UITextField(frame: CGRect(x: 20, y: 150, width: 200, height: 30)) passwordTextField.borderStyle = .rounded...
然而,在实际应用中,我们经常会遇到一个问题:当用户在`UITableView`中的输入框(如UITextField)中输入时,弹出的键盘可能会遮挡住部分或全部表格内容,这无疑会给用户体验带来困扰。针对“`UITableView`处理键盘...
`UITextField`是iOS应用开发中不可或缺的一个控件,主要用于接收用户输入文本。它在Objective-C(OC)和Swift这两种苹果的编程语言中都有广泛的应用。...通过实际项目练习,你会对`UITextField`有更深入的理解。
- 可以通过`NotificationCenter.default.addObserver(forName:object:queue:using:)`方法订阅键盘的通知,然后在回调中处理键盘的显示和隐藏事件。 4. **键盘高度计算**: - 在键盘通知的回调中,可以从`...
对于初学者或者对iOS基础知识掌握不够牢固的开发者来说,理解并熟练运用`UITextField`是必不可少的技能。在这个主题中,我们将深入探讨`UITextField`的基本用法、属性、方法以及如何在实际项目中有效地运用它。 ...