textView、textField键盘遮挡

原创 2017年01月03日 18:49:39

最近在做一个文本录入的app,多处需要处理键盘遮挡的问题,在这里对用到的方法进行整理

1.单个文本框输入遮挡,可以通过键盘通知方法里进行计算移动视图

- (void)viewDidLoad { } 方法里添加键盘监听

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(changeContentViewPosition:)

name:UIKeyboardWillShowNotification

object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(backViewPosition:)

name:UIKeyboardWillHideNotification

object:nil];

键盘显示和键盘收回的方法里做如下处理

- (void) changeContentViewPosition:(NSNotification *)notification

{

NSDictionary *info = [notification userInfo];

CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

CGRect frame = pwView.frame;

int offset = frame.origin.y + 50 - (self.view.frame.size.height -  keyboardSize.height);

NSTimeInterval animationDuration = 0.30f;

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

[UIView setAnimationDuration:animationDuration];

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

if(offset > 0)

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

[UIView commitAnimations];

}


-(void)backViewPosition:(NSNotification *)notification

{

NSTimeInterval animationDuration = 0.30f;

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

[UIView setAnimationDuration:animationDuration];

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

[UIView commitAnimations];

}

最后移除通知

-(void)viewWillDisappear:(BOOL)animated

{

[super viewWillDisappear:YES];

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];

}

2.tableViewCell包含textField   在键盘出现和收回方法里做如下处理

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

#pragma mark 键盘出现

-(void)keyboardWillShow:(NSNotification *)note

{

CGRect keyBoardRect=[note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

tableView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - keyBoardRect.size.height);

}

#pragma mark 键盘消失

-(void)keyboardWillHide:(NSNotification *)note

{

tableView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height );

}

textField数据保存

cell.textFiled.delegate = self;

- (void)textFieldDidEndEditing:(UITextField *)textField {

NSString *text = textField.text;

NSString *textIndexPath = [NSString stringWithFormat:@"%ld",(long)textField.tag];

//写一个字典用来保存数据

[self.textDict setObject:text forKey:textIndexPath];

}

3.tableView里既有textField还有textView,在使用第二个方法时发现textView输入时并不会移动视图,后来发现tableViewController已经帮我们处理好了 

@property (nonatomic,strong)UITableView *tableView;

[self.view addSubview:self.tableView];

- (UITableView *)tableView {

if (!_tableView) {

UITableViewController* tvc=[[UITableViewController alloc] initWithStyle:UITableViewStylePlain];

[self addChildViewController:tvc];

[tvc.view setFrame:self.view.frame];

_tableView=tvc.tableView;

_tableView.delegate = self;

_tableView.dataSource = self;

_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

}

return _tableView;

}将tableView替换成tableViewController即可

本文仅做记录和个人参考,不对之处还望大家指出,共勉

版权声明:本文为博主原创文章,未经博主允许不得转载。

如何实现被键盘遮挡时,带有textfield的tableview自动上移(转自cocoaChina)

最正规的办法,用通知 step 1: 在进入视图的时候添加监视:(viewDidLoad什么的) 复制代码 // Observe keyboard hide a...
  • yishengzhiai005
  • yishengzhiai005
  • 2016年10月12日 18:16
  • 790

当textField输入框被键盘遮挡时 让整个view上移

///键盘显示事件 - (void) keyboardWillShow:(NSNotification *)notification {     //获取键盘高度,在不同设备...
  • pilqc2009
  • pilqc2009
  • 2016年05月26日 15:36
  • 566

ios swift uitextview如何应对键盘的遮挡

参考http://stackoverflow.com/questions/35006738/auto-scroll-for-uitextview-using-swift-ios-app1.继承 UIT...
  • u012307002
  • u012307002
  • 2017年01月10日 23:09
  • 696

ios 键盘遮盖TextField的解决方法

常常我们在做界面的时候会用到文本框输入,但当把输入文本框放的过于低,就会导致在填写信息的时候弹出的虚拟键盘遮盖输入文本框,导致看不见所输入的信息,这对于用户体验当然很不好,所以我们需要改进这一情况,方...
  • qilixiang012
  • qilixiang012
  • 2014年10月28日 15:04
  • 793

IOS TextField弹出键盘挡住输入框的问题

最近碰到TextField弹出的键盘会挡住输入框的问题, 这样对输入很有影响, 所以我网上...
  • dexin5195
  • dexin5195
  • 2014年08月19日 22:47
  • 1131

键盘遮挡TextField

首先在: viewWillAppear 方法添加通知 /** 视图将要出现时添加通知 */ -(void)viewWillAppear:(BOOL)animated { [super vi...
  • dongruanlong
  • dongruanlong
  • 2017年05月23日 16:12
  • 109

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

- (void)keyboardWillShow:(NSNotification *)noti;//调整虚拟键盘与self.view之间的关系。 -(BOOL)textFieldShouldRe...
  • yuhao309
  • yuhao309
  • 2016年12月16日 21:18
  • 162

iOS开发 键盘遮挡输入框(TextView、TextField)问题

首先在.h文件中要添加UITextFieldDelegate ,UIGestureRecognizerDelegate,UITextViewDelegate  这三个协议。 下面是.m文件中的代...
  • ladyweiwei1234
  • ladyweiwei1234
  • 2013年06月20日 14:22
  • 2825

textField和textView的inputAccessoryView属性

inputAccessoryView属性 UITextFields and UITextViews have an inputAccessoryView property, which yo...
  • ojl12345
  • ojl12345
  • 2014年01月19日 22:59
  • 1274

Iphone在ScrollView下点击TextField使文本筐不被键盘遮住

今天星期六,一觉睡到十一点,本来还想睡的,想起还要写博客,就起来了,唉,好不容易老天不下雨,下午还打算去打球,好吧加油,这是第二篇了。 废话不多说,新建项目就不多说了,直接从编辑xib文件说起: ...
  • RiverAM
  • RiverAM
  • 2012年03月10日 14:07
  • 7396
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:textView、textField键盘遮挡
举报原因:
原因补充:

(最多只允许输入30个字)