当前位置 > 主页 > 万和大讲堂 >


南京iOS应用开发培训初学者详细总结

2015-06-16 11:38

  最近转入ios开发,发现ios的UITextField如果在屏幕的最底部的时候,键盘不能自动的调整界面的布局,需要手动的调整位置才可以,所以自己研究和拿着笔话,想写一个通用的方法来实现每一个界面自动适配键盘的位置,这样的话,不用每一个界面去操作界面的位置了,具体的解决方案如下:


  1. 先创建一个UIViewController 这个UIViewController作为父类,让以后的每一个界面继承这个界面,在这个界面里面实现一个委托,代码如下:


  [plain]


  @interface BaseViewController : UIViewController


  @interface BaseViewController : UIViewController


  2.在这个BaseViewCOntroller.m文件中,现实UITextFieldDelegate中的两个方法,textFieldDidBeginEditing(开始编辑UITextField和 textFieldDidEndEditing(结束编辑UITextField),大家都知道,iphone的键盘都是固定的,都是系统自带的,没有第三方的输入法的,所以键盘的高度是固定的216,我们只要在开始编辑的时候,计算一下当前的UITextField的所在高度相对底部是否有216(就是UITextField的底部边缘相对屏幕的底部是否有216个长度),如果不够216,就需要把整体的view上移达到216高度即可;当我们结束编辑的时候,把之前增加的高度相反操作即可,代码如下:南京iOS应用开发培训


  //设置调整界面的动画效果//设置调整界面的动画效果


  [plain]


  int prewTag ; //编辑上一个UITextField的TAG,需要在XIB文件中定义或者程序中添加,不能让两个控件的TAG相同


  float prewMoveY; //编辑的时候移动的高度


  // 下面两个方法是为了防止TextFiled让键盘挡住的方法


  /**


  开始编辑UITextField的方法


  */


  -(void) textFieldDidBeginEditing:(UITextField *)textField


  {


  CGRect textFrame = textField.frame;


  float textY = textFrame.origin.y+textFrame.size.height;


  float bottomY = self.view.frame.size.height-textY;


  if(bottomY>=216) //判断当前的高度是否已经有216,如果超过了就不需要再移动主界面的View高度


  {南京iOS应用开发培训


  prewTag = -1;


  return;


  }


  prewTag = textField.tag;


  float moveY = 216-bottomY;


  prewMoveY = moveY;


  NSTimeInterval animationDuration = 0.30f;


  CGRect frame = self.view.frame;


  frame.origin.y -=moveY;//view的Y轴上移


  frame.size.height +=moveY; //View的高度增加


  self.view.frame = frame;


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


  [UIView setAnimationDuration:animationDuration];


  self.view.frame = frame;


  [UIView commitAnimations];//设置调整界面的动画效果


  }


  /**


  结束编辑UITextField的方法,让原来的界面还原高度


  */ 南京iOS应用开发培训


  -(void) textFieldDidEndEditing:(UITextField *)textField


  {


  if(prewTag == -1) //当编辑的View不是需要移动的View


  {


  return;


  }


  float moveY ;


  NSTimeInterval animationDuration = 0.30f;


  CGRect frame = self.view.frame;


  if(prewTag == textField.tag) //当结束编辑的View的TAG是上次的就移动


  { //还原界面


  moveY = prewMoveY;


  frame.origin.y +=moveY;


  frame.size. height -=moveY;


  self.view.frame = frame;


  }


  //self.view移回原位置


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


  [UIView setAnimationDuration:animationDuration];


  self.view.frame = frame;


  [UIView commitAnimations];


  [textField resignFirstResponder];


  }南京iOS应用开发培训


  int prewTag ; //编辑上一个UITextField的TAG,需要在XIB文件中定义或者程序中添加,不能让两个控件的TAG相同


  float prewMoveY; //编辑的时候移动的高度


  // 下面两个方法是为了防止TextFiled让键盘挡住的方法


  /**


  开始编辑UITextField的方法


  */


  -(void) textFieldDidBeginEditing:(UITextField *)textField


  {


  CGRect textFrame = textField.frame;


  float textY = textFrame.origin.y+textFrame.size.height;


  float bottomY = self.view.frame.size.height-textY;


  if(bottomY>=216) //判断当前的高度是否已经有216,如果超过了就不需要再移动主界面的View高度


  {


  prewTag = -1;


  return;


  }


  prewTag = textField.tag;


  float moveY = 216-bottomY;


  prewMoveY = moveY;


  NSTimeInterval animationDuration = 0.30f;


  CGRect frame = self.view.frame;


  frame.origin.y -=moveY;//view的Y轴上移


  frame.size.height +=moveY; //View的高度增加


  self.view.frame = frame;


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


  [UIView setAnimationDuration:animationDuration];


  self.view.frame = frame;


  [UIView commitAnimations];//设置调整界面的动画效果


  } 南京iOS应用开发培训


  /**


  结束编辑UITextField的方法,让原来的界面还原高度


  */


  -(void) textFieldDidEndEditing:(UITextField *)textField


  {


  if(prewTag == -1) //当编辑的View不是需要移动的View


  {


  return;


  }


  float moveY ;


  NSTimeInterval animationDuration = 0.30f;


  CGRect frame = self.view.frame;


  if(prewTag == textField.tag) //当结束编辑的View的TAG是上次的就移动


  { //还原界面


  moveY = prewMoveY;


  frame.origin.y +=moveY;


  frame.size. height -=moveY;


  self.view.frame = frame;


  }


  //self.view移回原位置


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


  [UIView setAnimationDuration:animationDuration];


  self.view.frame = frame;


  [UIView commitAnimations];


  [textField resignFirstResponder];


  }


  3.在上面的代码中,我们已经增加了委托对UITextField的编辑监听,下面我们就要让我们的子类UIViewController去监听委托


  代码:


  [plain]


  IDNameField.delegate = self;


  IDNameField.delegate = self;IDNameField是我继承BaseViewController的子类UIViewController中的一个UITextField,只要实现了上面的操作,我们的UITextField就可以在每一个界面实现自动适配调整界面,达到防止键盘挡住UITextField的效果了。


最近开班 more>
  • Python基础班
  • Java全栈开发
  • 前端基础班
  • 软件测试
  • 云原生精英班
  • 云网预科班
  • CISP
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCM 12C
  • OCP 19C
  • RHCE 9.0
  • 随时开课
  • 12月26日
  • 随时开课
  • 12月4日
  • 12月16日
  • 12月9日
  • 12月21日
  • 1月6日
  • 12月30日
  • 12月16日
  • 12月21日
  • 12月7日
  • 12月7日
  • ——
  • 随时开课
  • 12月16日
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入