`
- 浏览:
3350 次
- 性别:
- 来自:
广州
-
- - (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;
- }
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
5. 使用自定义键盘:在需要的文本字段(UITextField或UITextView)中,设置输入视图控制器为自定义键盘。 ```swift textField.inputViewController = storyboard?.instantiateViewController(withIdentifier: ...
通过这些方法,我们可以监听用户的触摸事件,并根据需要显示和处理自定义的键盘视图。例如,我们可以创建一个UIView子类作为键盘,然后在触摸事件中更新其显示内容和行为。 ```swift class CustomKeyboardView: ...
除了上述方法,我们还可以使用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...
此外,`UITextField`还有一个`delegate`属性,可以设置为遵循`UITextFieldDelegate`协议的类实例,通过实现其协议方法来监听并处理用户输入的各种事件。 描述中提到的“bug”可能是由于在限制字符长度时,没有正确...
UIKit中的2向绑定 演示如何使用Combine框架在UIKit中创建双向绑定 为了生成大多数UIControl...UITextField具有textPublisher() -> AnyPublisher <String> UIButton有一个tapPublisher() -> AnyPublisher <Void>
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { super.touchesBegan(touches, with: event) view.endEditing(true) } ``` 这个方法会在视图接收到触摸事件时被调用,进而调用`...
然而,在某些场景下,开发者可能希望`UITextView`具备`UITextField`的一些特性,比如,限制输入字符数、设置 placeholder 或者实现简单的键盘返回事件处理。本篇文章将详细探讨如何通过自定义`UITextView`来实现`...
总结来说,这个Swift开发中的Category实践,通过扩展UITextField,实现了对文本输入字数的智能管理,使得开发者在处理用户输入时能更方便地控制数据格式,提高了用户体验。这种利用Swift扩展功能优化已有类的方法,...
通过上述方法,我们可以创建一个名为“完美Demo”的应用示例,它演示了如何优雅地处理键盘弹出时输入框被遮挡的问题。这个zip文件中的代码应该包含了实现这些功能的完整示例,开发者可以参考学习并根据自己的项目...
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { view.endEditing(true) // 隐藏当前视图内所有输入框的键盘 } ``` 通过以上步骤,我们便能用代码实现一个简单的包含Label和...
这个教程将重点讲解如何利用`UITextField`的代理方法来实现一个类似QQ登录窗口的功能,包括显示暗文(隐藏密码)以及添加删除小叉号。 首先,我们需要了解`UITextField`的代理协议`UITextFieldDelegate`。这个协议...
2. **事件处理**:`UITextField`提供了诸如`textFieldDidBeginEditing:`、`textFieldDidEndEditing:`、`textField:shouldChangeCharactersInRange:replacementString:`等代理方法,可以通过实现这些方法来监听用户...
本文档提供了一套对 `UITextField` 的扩展方法,这些方法可以帮助开发者更方便地创建和自定义文本框。 #### 文件结构 文档包含了两个部分:`.h` 头文件和 `.m` 实现文件。 1. **UITextField+Jex.h**:头文件声明...
例如,可以使用`textFieldShouldReturn(_:)`方法处理回车键事件,通常用于提交表单。 在实际项目中,我们常常需要对用户输入的数据进行验证,比如限制输入长度、格式校验等。这些都可以通过代理方法或者自定义扩展...
2. 实现UIKeyboardProtocol协议,这个协议包含两个方法:`- (CGRect)rectForKey:(id<UIKey>)key`和`- (NSArray<id<UIKey>> *)keysForRect:(CGRect)rect`。这两个方法用于告诉系统自定义键盘的布局,以便于计算触摸...