`

textField被虚拟键盘挡住解决方法

 
阅读更多

[IOS]textField被虚拟键盘挡住解决方法

经常会遇到以下情况,textField被虚拟键盘挡住的情况,解决。

RootViewController.h  中:
#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController<UITextFieldDelegate> {

UITextField *textField1;
UITextField *textField2;

}
@property (nonatomic,retain) UITextField *textField1;
@property (nonatomic ,retain) UITextField *textField2;

-(IBAction)backgroundTap:(id)sender;


@end
RootViewController.m  中:
#import "RootViewController.h"

@implementation RootViewController
@synthesize textField1;
@synthesize textField2;

// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
/*

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization.
}
return self;
}
*/

/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {

UIView *back = [[UIView alloc] initWithFrame:[[UIScreen mainScreen]bounds]];
back.backgroundColor = [UIColor grayColor];
self.view = back;
[back release];
}
*/

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];

UIControl *_back = [[UIControl alloc] initWithFrame:self.view.frame];
_back.backgroundColor = [UIColor grayColor];
self.view = _back;
[_back release];
[(UIControl *)self.view addTarget:self action:@selector(backgroundTap:) forControlEvents:UIControlEventTouchDown];


textField1 = [[UITextField alloc] initWithFrame:CGRectMake(20, 300, 200, 30)];
textField1.backgroundColor = [UIColor clearColor];
textField1.borderStyle = UITextBorderStyleRoundedRect;
textField1.textColor = [UIColor redColor];
textField1.delegate = self;
[self.view addSubview:textField1];

textField2 = [[UITextField alloc] initWithFrame:CGRectMake(20, 30, 200, 30)];
textField2.backgroundColor = [UIColor clearColor];
textField2.borderStyle = UITextBorderStyleRoundedRect;
textField2.textColor = [UIColor redColor];
textField2.delegate = self;
[self.view addSubview:textField2];


}

#pragma mark -
#pragma mark 解决虚拟键盘挡住UITextField的方法
- (void)keyboardWillShow:(NSNotification *)noti
{
//键盘输入的界面调整
//键盘的高度
float height = 216.0;
CGRect frame = self.view.frame;
frame.size = CGSizeMake(frame.size.width, frame.size.height - height);
[UIView beginAnimations:@"Curl"context:nil];//动画开始
[UIView setAnimationDuration:0.30];
[UIView setAnimationDelegate:self];
[self.view setFrame:frame];
[UIView commitAnimations];
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
// When the user presses return, take focus away from the text field so that the keyboard is dismissed.
NSTimeInterval animationDuration = 0.30f;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
CGRect rect = CGRectMake(0.0f, 20.0f, self.view.frame.size.width, self.view.frame.size.height);
self.view.frame = rect;
[UIView commitAnimations];
[textField resignFirstResponder];
return YES;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
CGRect frame = textField.frame;
int offset = frame.origin.y + 32 - (self.view.frame.size.height - 216.0);//键盘高度216
NSTimeInterval animationDuration = 0.30f;
[UIView beginAnimations:@"ResizeForKeyBoard" context:nil];
[UIView setAnimationDuration:animationDuration];
float width = self.view.frame.size.width;
float height = self.view.frame.size.height;
if(offset > 0)
{
CGRect rect = CGRectMake(0.0f, -offset,width,height);
self.view.frame = rect;
}
[UIView commitAnimations];
}
#pragma mark -

#pragma mark -
#pragma mark 触摸背景来关闭虚拟键盘
-(IBAction)backgroundTap:(id)sender
{
// When the user presses return, take focus away from the text field so that the keyboard is dismissed.
NSTimeInterval animationDuration = 0.30f;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
CGRect rect = CGRectMake(0.0f, 20.0f, self.view.frame.size.width, self.view.frame.size.height);
self.view.frame = rect;
[UIView commitAnimations];

[textField1 resignFirstResponder];
[textField2 resignFirstResponder];
}

#pragma mark -

/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/

- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc. that aren't in use.
}

- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
[textField1 release];
[textField2 release];
[super dealloc];
}

RootViewController.m 中的backgroundTap:方法,用来实现触摸背景来关闭虚拟键盘。

这个方法用的时候首先把RootViewController上的view改成UIControl,然后通过UIControl的事件UIControlEventTouchDown来触发上面的方法backgroundTap: 。

注意下面的代码:

UIControl *_back = [[UIControl alloc] initWithFrame:self.view.frame];
_back.backgroundColor = [UIColor grayColor];
self.view = _back;
[_back release];
[(UIControl *)self.view addTarget:self action:@selector(backgroundTap:) forControlEvents:UIControlEventTouchDown];


解决textField被键盘挡住的问题的方法有三个:

- (void)keyboardWillShow:(NSNotification *)noti;//调整虚拟键盘与self.view之间的关系。
-(BOOL)textFieldShouldReturn:(UITextField *)textField;//触摸键盘上的return键时关闭虚拟键盘
- (void)textFieldDidBeginEditing:(UITextField *)textField;//当编辑文本的时候,如果虚拟键盘挡住了textField,整个view就会向上移动。移动范围是一个键盘的高度216。



分享到:
评论

相关推荐

    Qt 5.9.2 虚拟键盘中文输入

    **Qt 5.9.2 虚拟键盘中文输入** Qt是一个强大的跨平台应用程序开发框架,被广泛用于创建桌面、移动和嵌入式设备的应用程序。在Qt中,qtvirtualkeyboard模块提供了构建自定义虚拟键盘的功能。在Qt 5.9.2版本中,该...

    QML编写的虚拟键盘

    同时,QML的可视化组件库提供了丰富的预定义元素,如Button、TextField等,使得构建键盘布局变得直观而高效。 总的来说,"QML编写的虚拟键盘"项目展示了QML在构建灵活、功能齐全的用户界面方面的强大能力。通过QML...

    代码实现Lable 、textField创建界面以及键盘的处理

    本教程将专注于使用代码实现Label和TextField来构建UI,并探讨如何处理键盘的显示与关闭。我们将结合`LTFDemo`这个示例项目进行讲解。 首先,让我们了解Label和TextField的基本概念。Label(标签)是用来展示静态...

    IOS 键盘挡住输入框的问题解决办法

    IOS 键盘挡住输入框的问题解决办法 IOS 键盘挡住输入框的问题是一个常见的问题,在 iOS 开发中,我们经常遇到这种情况:当用户开始输入时,键盘弹出,挡住输入框,使用户无法看到实时的输入情况。这对用户体验非常...

    iOS textField弹出自定义键盘(日期时间、省市、国家)

    本文将深入探讨如何在`textField`中实现弹出自定义键盘,特别是日期时间、省市、国家等特定类型的键盘。我们将主要关注以下几个方面:自定义键盘的基本构建、省市选择键盘的实现、日期时间键盘的创建以及国家选择...

    qml 软键盘 虚拟键盘

    综上所述,解决"qml软键盘虚拟键盘"问题的关键在于理解和调整QML与C++的交互机制,以及正确处理焦点事件和软键盘的显示控制。对于自定义虚拟键盘,需要关注QML的布局和动画,以及与输入组件的配合。在调试过程中,...

    TextField和键盘上移位置

    为了解决这个问题,开发者通常会实现一种机制,使得`TableView`或`ScrollView`能够自动上移到键盘上方,以便用户能清晰看到正在输入的`TextField`。 在iOS中,我们可以利用`UIKeyboardWillShowNotification`和`...

    iOS虚拟键盘上添加动态按钮

    在iOS开发中,虚拟键盘(UIKeyboard)是用户与输入框进行交互的重要组成部分。有时,开发者可能需要在虚拟键盘上添加自定义的功能按钮,以增强用户体验或者实现特定业务需求。这个话题,"iOS虚拟键盘上添加动态按钮...

    键盘挡住问题

    这个问题被称为“键盘挡住问题”,是移动应用开发中常见的用户体验问题。在给定的“键盘挡住问题”Demo中,开发者可能已经提出了一种解决方案来处理这个常见状况。下面我们将详细讨论这个问题及其解决策略。 首先,...

    键盘遮挡问题

    对于iOS开发,解决键盘遮挡问题的方法多种多样。可以使用`UIScrollView`或`CollectionView`来承载textField,并调整contentInset或contentOffset,使得键盘弹出时,整个界面能够向上滚动,露出被键盘遮挡的部分。...

    textField的一个简单例子

    在这个"textField的一个简单例子"中,我们将探讨如何实现键盘的点击隐藏,并解决键盘弹出时遮挡`textField`的问题。这个例子可能涉及到`UITableView`的使用,因为通常在列表视图中,`textField`会出现在单元格中。 ...

    swift-自动控制viewController的textView和textField被键盘遮挡问题引入.h即可

    在Swift开发过程中,我们经常会遇到一个困扰用户界面(UI)设计的问题:当用户在文本视图(如...同时,由于其简单的API和易于集成的特点,`SXKeyboardViewControl`成为了很多Swift开发者解决键盘遮挡问题的首选方案。

    自定义输入textfield

    在iOS和Android等移动应用开发中,`TextField`(在iOS中称为`UITextField`,在Android中称为`EditText`)是用户输入文本的基本组件。它允许用户在屏幕上输入、编辑和查看文本,是构建交互式应用程序不可或缺的部分。...

    基于TextField的图文混编的组件

    基于TextField的图文混编组件是一种解决方案,它利用了Adobe Flash(ActionScript 3,AS3)中的TextField类来实现这一功能。TextField在Flash中是一个基础的文本显示和编辑控件,它可以处理简单的文本输入,但通过...

    Java中TextField类.pdf

    `TextField`类提供了几个构造方法来初始化组件,每种方法都有不同的用途: - `TextField()`:创建一个没有初始文本、默认宽度的`TextField`。 - `TextField(int columns)`:创建一个指定列数(显示字符数)的`...

    IOS应用源码之让键盘消失textField .zip

    而`textFieldShouldReturn`方法则是关键,当用户按下键盘上的“回车”或“完成”键时,我们调用`textField.resignFirstResponder()`方法,这会让textField失去焦点,从而隐藏键盘。 除了通过代理方法,还可以通过...

    自定义textfield

    在iOS和Android应用开发中,`TextField`(在iOS中称为`UITextField`,在Android中称为`EditText`)是用户输入文本的基本组件。本主题将深入探讨如何自定义`TextField`,以满足特定的设计和功能需求,从而提高用户...

    ExtJs5 去掉textfield边框

    在ExtJs5中,开发人员有时需要自定义UI以满足特定的设计需求,比如去掉`textfield`...这种方法可以灵活地控制`textfield`的外观,以满足各种定制需求。当然,实现过程中应遵循良好的编程实践,保持代码整洁且易于维护。

    手工创建TextField

    3. **键盘回调**: 我们可以设置键盘相关的代理方法来处理键盘的显示和隐藏,以及用户输入的响应。`UITextField`遵循`UIControl`和`UITextInput`协议,提供了以下回调方法: - `textFieldShouldBeginEditing(_ ...

Global site tag (gtag.js) - Google Analytics