关于输入框被键盘覆盖及收回键盘的问题

-----------ViewController.m中的内容------------

#import "ViewController.h"

#import "ScreenView.h"

@interface ViewController ()<UITextFieldDelegate>

{

ScreenView *_screenV;//覆盖全屏

UIView *secView;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self textFieldOnView:self.view];//添加子视图

[self coverBtnOnView:self.view];//添加按钮

}

- (void)textFieldOnView:(UIView *)currentV{

UITextField *tF1 = [[UITextField alloc]init];

tF1.frame = CGRectMake(30, 100, 100, 40);

tF1.delegate = self;

#pragma ------设置tF1.tag = 1;

tF1.tag = 1;

tF1.borderStyle = UITextBorderStyleRoundedRect;

[currentV addSubview: tF1];

UITextField *tF2 = [[UITextField alloc]init];

tF2.frame = CGRectMake(30, 500, 100, 40);

tF2.delegate = self;

tF2.borderStyle = UITextBorderStyleRoundedRect;

[currentV addSubview: tF2];

secView = [[UIView alloc]initWithFrame:CGRectMake(150, 200, 200, 300)];

secView.backgroundColor = [UIColor yellowColor];

[currentV addSubview:secView];

UITextField *textF1 = [[UITextField alloc]init];

textF1.frame = CGRectMake(30, 100, 100, 40);

textF1.delegate = self;

textF1.borderStyle = UITextBorderStyleRoundedRect;

[secView addSubview: textF1];

UITextField *textF2 = [[UITextField alloc]init];

textF2.frame = CGRectMake(30, 250, 100, 40);

textF2.delegate = self;

textF2.borderStyle = UITextBorderStyleRoundedRect;

[secView addSubview: textF2];

}

- (void)coverBtnOnView:(UIView *)currentV{

UIButton *coverBtn = [UIButton buttonWithType:UIButtonTypeSystem];

coverBtn.backgroundColor = [UIColor cyanColor];

if (!_screenV) {

[coverBtn setTitle:@"覆盖全屏" forState:UIControlStateNormal];

[coverBtn addTarget:self action:@selector(coverScreen) forControlEvents:UIControlEventTouchUpInside];

}else{

[coverBtn setTitle:@"返回" forState:UIControlStateNormal];

[coverBtn addTarget:self action:@selector(removeCoverScreen) forControlEvents:UIControlEventTouchUpInside];

}

UIView *v = [self.view viewWithTag:1];

coverBtn.frame = v.frame;

CGRect temp = coverBtn.frame;

temp.origin.x += temp.size.width;

coverBtn.frame = temp;

[currentV addSubview:coverBtn];

}

- (void)removeCoverScreen{

[_screenV removeFromSuperview];

}

- (void)coverScreen{

_screenV = [[ScreenView alloc]initWithFrame:[UIScreen mainScreen].bounds];

#pragma -----视图本身透明度

_screenV.backgroundColor = [[UIColor brownColor]colorWithAlphaComponent:0.5];

#pragma -----视图及其子视图透明度

//    screenV.alpha = 0.7;

#pragma -----创建view覆盖全屏,需要新建如ScreenView类,重写touchesBegan方法

[[UIApplication sharedApplication].keyWindow addSubview:_screenV];

#pragma -----如果self.view是全屏大小,下句可行,_screenV直接用UIView初始化,并能响应触摸事件

//    [self.view addSubview:_screenV];

[self textFieldOnView:_screenV];//添加textField

[self coverBtnOnView:_screenV];

}

//开始编辑输入框的时候,软键盘出现,执行此事件

-(void)textFieldDidBeginEditing:(UITextField *)textField

{

UIView *tempView = self.view;

if (_screenV) {

tempView = _screenV;

}

UIWindow *window = [[[UIApplication sharedApplication] delegate]window];

CGRect rect = [textField convertRect:textField.bounds toView:window];//将textField相对于其父视图的坐标转换成相对于window的坐标

NSInteger y = rect.origin.y + textField.frame.size.height;

NSInteger offset = (y - (tempView.frame.size.height - 256.0));//键盘高度216 //如何获取键盘高度?

NSTimeInterval animationDuration = 0.30f;

[UIView beginAnimations:@"ResizeForKeyboard" context:nil];

[UIView setAnimationDuration:animationDuration];

//将视图的Y坐标向上移动offset个单位,以使下面腾出地方用于软键盘的显示

if(offset > 0)

tempView.frame = CGRectMake(0.0f, -offset, tempView.frame.size.width, tempView.frame.size.height);

[UIView commitAnimations];

}

////当用户按下return键或者按回车键,keyboard消失

//-(BOOL)textFieldShouldReturn:(UITextField *)textField

//{

//    [textField resignFirstResponder];

//    return YES;

//}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

[super touchesBegan:touches withEvent:event];

[self.view endEditing:YES];

}

//输入框编辑完成以后,将视图恢复到原始状态

-(void)textFieldDidEndEditing:(UITextField *)textField

{

UIView *tempView = self.view;

if (_screenV) {

tempView = _screenV;

}

tempView.frame =CGRectMake(0, 0, tempView.frame.size.width, tempView.frame.size.height);

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

-----------------ScreenView.m中的内容-----------------

#import "ScreenView.h"

@implementation ScreenView

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

[super touchesBegan:touches withEvent:event];

[self endEditing:YES];

}

@end

有疏漏之处敬请指正。

END

时间: 2024-10-04 04:30:26

关于输入框被键盘覆盖及收回键盘的问题的相关文章

如何保持iOS上键盘出现时输入框不被覆盖

在 iOS5 上请求显示键盘时,系统从屏幕底部将键盘滑入上来,位于应用的内容之上. (墙内:http://mikixiyou.iteye.com/blog/1488302) 如果屏幕中的内容项目比较多,它就可能覆盖住文本输入框之类的对象.你必须调整你的内容,使得输入框保持可见. 你会想到哪些处理方法呢? 第一种, 临时调整窗口中各个视图的大小,使得键盘从下向上占领的区域空白.键盘的高度( keyboard.size.height )是一定的,将视图中所有内容所在区域的 y 值减小到 y-keyb

学习制作iOS程序第三天:创建全局变量,预编译函数等、优化TabBarController、加入Bugly崩溃日志、解决键盘覆盖文本框的问题

十一:创建Define定义文件和pch预处理文件 1.在Define目录里创建Const.h文件,用于保存一些常用的宏命令 #define CURRENT_APPID @"" #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_

IOS seachbar 收回键盘

1 //点击搜索 收回键盘 2 3 -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{ 4 5 6 7 [_searchBar resignFirstResponder];//放弃第一响应者对象,关闭虚拟键盘 8 } 代理 UISearchBarDelegate

2015 IOS 收回键盘——在蓝懿教育

一.使用OC1.首先, 要添加代理 UITextFieldDelegate2.设置代理 textField.delegate = self;3.实现协议中的方法 //点击return收回键盘- (BOOL)textFieldShouldReturn:(UITextField *)textField { //回收键盘,取消第一响应者 [textField resignFirstResponder]; return YES; } //点击空白处收回键盘- (void)touchesEnded:(NS

[iOS]UITableViewController完成收回键盘操作

UITableViewController 本身能够实现键盘适配(cell中控件焦点会移动到键盘上方 在做键盘收回的时候思考过如下方案 1.tableview添加点击事件 结果:点击事件和tableview的didselect 冲突,导致didselect失效 2.scrollview代理滚动收回键盘 结果:目的可以达到,但是当点击textfield的时候,此时键盘会出现之后直接收回.原因是先适配→调用scrollview代理. 最后采用如下方案 如图: <span style="font

iOS 点击空白处收回键盘的几个简单代码

//收回键盘1 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [((UIView*)obj) resignFirstResponder]; }]; } //收回键盘2 - (void)resignKeyBoardInView:(UIView

iOS 当键盘覆盖textFiled时简单的处理方法

//方法1--- - (void)textFieldDidBeginEditing:(UITextField *)textField { if (iPhone5) { return; } else { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; [UIView setAnimationDelegate:self]; //设定动画开始时的状态为目前画面上的样子 [UIView setAn

世界最快机械键盘诞生 传统机械键盘还有未来吗?

今年年初,苹果正式对外发布12吋版的Retina MacBook笔记本,这款新产品除了具备众望所归的视网膜屏幕之外,其最大的特色还来自于使用了蝶式键盘架构.不过,针对苹果的这一重大创新,大多媒体在进行评测的时候均指出,这种键盘结构虽然提升了笔记本整体的观感,但对于文字输入而言却是一个倒退,很多专业人士在评测这款Macbook的时候,甚至明确指出其并不适合普通用户使用. 而另一则同样和键盘有关的消息,则是小米可能将在今年内推出全新的机械键盘. 这两起事件和消息虽然并无颠覆性影响或重大意义,但也透露

apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard

想在苹果电脑 mac 系统下使用 机械键盘,大部分机械键盘不是为mac设计的,所以需要用软件做一下键盘映射. 推荐使用这个:https://pqrs.org/osx/karabiner/ . apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard