看过很多解决此类问题的方法,感觉都很棒,我这里做个简单的总结和推荐方法。
输入框是继承UITextFiled的控件,他有两个代理方法,能够解决上述问题,并且很简单,很适用,是本人极力推荐的方法。
在.h文件中
//
// LYXViewController.h
// helloWord
//
// Created by liyongxing on 13-7-2.
// Copyright (c) 2013年 liyongxing. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface LYXViewController :UIViewController
@property (nonatomic ,strong)UIButton * button;
@property (nonatomic ,strong)UITextField * textFiled;
@end
//
// LYXViewController.m
// helloWord
//
// Created by liyongxing on 13-7-2.
// Copyright (c) 2013年 liyongxing. All rights reserved.
//
#import "LYXViewController.h"
#import <QuartzCore/QuartzCore.h>
@interface LYXViewController ()<UITextFieldDelegate>
@end
@implementation LYXViewController
- (void)viewDidLoad
{
[superviewDidLoad];
//创建一个UITextFiled对象
self.textFiled = [[UITextFieldalloc]initWithFrame:CGRectMake(50,300,200,50)];
self.textFiled.backgroundColor = [UIColorbrownColor];
//引用代理
self.textFiled.delegate =self;
[self.view addSubview:self.textFiled];
}
#pragma mark-----------实现代理方法------------------
//当开始编辑时触发的方法,就是将输入框向上推 a个距离,前提时a的值大于零,如果不大于,则不会产生向上推动的方法,此时,可在将场数量,后面的50再多加些,比如80,100,慢慢尝试
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
//设置向上推动的动画时间,此位固定写法,0.30f的值可以自己调,位置不能和判断的方法调换,否则不会生效
NSTimeInterval animationRadius =0.30f;
//这两个方法是有先后顺序的,不能调换
[UIView beginAnimations:@"aa"context:nil];
[UIView setAnimationDuration:animationRadius];
//
//设置一个常量,用以判断此输入框是否需要向上推动,他会判断同一界面上的所有UITextFiled的对象,而有些方法只是针对一个,所以,我建议采用这个方法
NSInteger a = textField.frame.origin.y - (self.view.frame.size.height-216.0)+50;
if (a >0)
{
self.view.frame =CGRectMake(0, -a,self.view.frame.size.width,self.view.frame.size.height);
}
[UIView commitAnimations];
}
//当编辑后,恢复原来的视图大小
-(void)textFieldDidEndEditing:(UITextField *)textField
{
self.view.frame =CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height);
}
//当编辑完成后,按return键推掉键盘
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
return [self.textFiled resignFirstResponder];
}
- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
}
@end