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

来源:互联网 发布:淘宝店logo在线制作 编辑:程序博客网 时间:2024/06/06 06:36

转自:http://blog.csdn.net/duxinfeng2010/article/details/7697120





1.创建一个新工程叫LTFDemo; File->New->Project ->single View Application -> next



2.打开LTFViewController.h文件,添加UITextFieldDelegate协议,因为TextField里输入内容时需要对键盘进行一些设置。界面需要一些布局,在LTFViewController.h文件一些声明对象

[cpp] view plaincopyprint?
  1. <span style="font-size:12px;">#import <UIKit/UIKit.h>  
  2.   
  3. @interface LTFViewController : UIViewController<UITextFieldDelegate>  
  4. {  
  5.     UILabel *studentLable;//设置学生标题  
  6.     UILabel *sNameLable;//学生姓名  
  7.     UILabel *sSexLable;//学生性别  
  8.     UILabel *sAgeLable;//学生年龄  
  9.       
  10.     UILabel *teacherLable;//老师标题  
  11.     UILabel *tNameLable;//老师姓名  
  12.     UILabel *tSexLable;//老师姓名  
  13.       
  14.     UITextField *sNameTextField;//学生姓名输入框  
  15.     UITextField *sAgeTextField;//学生年龄输入框  
  16.     UITextField *sSexTextField;//学生性别输入框  
  17.     UITextField *tNameTextField;//老师姓名输入框     
  18.     UITextField *tSexTextField; //老师性别输入框  
  19. }  
  20.   
  21. @end</span>  


3.例举一个Lable的代码属性及功能的实现过程


初始化lable的位置和大小,CGRectMake()函数中的参数分别是原点坐标x和y,后面两个参数表示lable的宽度(width)和高度(height),

studentLable=[[UILabelallocinitWithFrame:CGRectMake(100,10100,30)];

设置Lable的字体颜色值颜色,

[studentLable setTextColor:[UIColor blackColor]];

设置lable字体大小

studentLable.font=[UIFontsystemFontOfSize:20];

设置lable的背景颜色

studentLable.backgroundColor = [UIColor redColor];

设置lable的标题字体对齐方式,此处居中对其

[studentLable setTextAlignment:UITextAlignmentCenter];

设置lable标题

studentLable.text=@" ";

把lable添加到视图上,少了这一步视图上使显示不出来的

[self.view addSubview:studentLable];



4.例举一个TextField的代码的实现其属性和功能的过程


//初始化坐标位置

sNameTextField=[[UITextFieldallocinitWithFrame:CGRectMake(100,60200,30)];

//为空白文本字段绘制一个灰色字符串作为占位符,提示作用     

sNameTextField.placeholder =@"输入姓名";

 //默认就是左对齐,这个是UITextField扩展属性   

sNameTextField.textAlignment =UITextAlignmentLeft;

 //设置textField的形状    

sNameTextField.borderStyle=UITextBorderStyleRoundedRect

//设置键盘完成按钮

sNameTextField.returnKeyType=UIReturnKeyDone;

//委托类需要遵守UITextFieldDelegate协议    

sNameTextField.delegate=self; 

//设置TextFiel输入框字体大小

sNameTextField.font = [UIFontsystemFontOfSize:18]; 

//安全设置,密文保护设置,显示点点,常用于密码设置栏

sNameTextField.secureTextEntry = YES;  

//   TextField添加到视图上

 [self.viewaddSubview:sNameTextField];


//输入年龄需要启用数字键盘,此处实现自动跳转到数字键盘

sAgeTextField.keyboardType =UIKeyboardTypeNumberPad;



5.介绍完lable和TextField代码实现打开LTFViewController.m文件在ViewDidLoad中添加初始化代码,

[cpp] view plaincopyprint?
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     // Do any additional setup after loading the view, typically from a nib.  
  5.     studentLable=[[UILabel alloc] initWithFrame:CGRectMake(100, 10, 100, 30)];  
  6.     sNameLable=[[UILabel alloc] initWithFrame:CGRectMake(10, 60, 80, 30)];  
  7.     sSexLable=[[UILabel alloc] initWithFrame:CGRectMake(10, 100, 80, 30)];  
  8.     sAgeLable=[[UILabel alloc] initWithFrame:CGRectMake(10, 140, 80, 30)];  
  9.       
  10.     teacherLable=[[UILabel alloc] initWithFrame:CGRectMake(100, 200, 100, 30)];  
  11.     tNameLable=[[UILabel alloc] initWithFrame:CGRectMake(10,240, 80, 30)];  
  12.     tSexLable=[[UILabel alloc] initWithFrame:CGRectMake(10, 280, 80, 30)];  
  13.       
  14.       
  15.     [studentLable setTextColor:[UIColor blackColor]];  
  16.     [sNameLable setTextColor:[UIColor blackColor]];  
  17.     [sAgeLable setTextColor:[UIColor blackColor]];  
  18.     [sSexLable setTextColor:[UIColor blackColor]];  
  19.       
  20.     [teacherLable setTextColor:[UIColor blackColor]];  
  21.     [tNameLable setTextColor:[UIColor blackColor]];  
  22.     [tSexLable setTextColor:[UIColor blackColor]];  
  23.        
  24.       
  25.     studentLable.backgroundColor = [UIColor redColor];  
  26.     sNameLable.backgroundColor = [UIColor clearColor];  
  27.     sAgeLable.backgroundColor=[UIColor clearColor];  
  28.     sSexLable.backgroundColor = [UIColor clearColor];  
  29.     teacherLable.backgroundColor = [UIColor blueColor];  
  30.     tNameLable.backgroundColor = [UIColor clearColor];  
  31.     tSexLable.backgroundColor = [UIColor clearColor];  
  32.       
  33.     [studentLable setTextAlignment:UITextAlignmentCenter];  
  34.     [sNameLable setTextAlignment:UITextAlignmentCenter];  
  35.     [sAgeLable setTextAlignment:UITextAlignmentCenter];  
  36.     [sSexLable setTextAlignment:UITextAlignmentCenter];  
  37.       
  38.       
  39.     [teacherLable setTextAlignment:UITextAlignmentCenter];  
  40.     [tNameLable setTextAlignment:UITextAlignmentCenter];  
  41.     [tSexLable setTextAlignment:UITextAlignmentCenter];  
  42.       
  43.     studentLable.text=@"学  生";  
  44.     sNameLable.text=@"姓名:";  
  45.     sAgeLable.text=@"性别:";  
  46.     sSexLable.text=@"年龄:";  
  47.       
  48.     teacherLable.text=@"老  师";  
  49.     tNameLable.text=@"姓名:";  
  50.     tSexLable.text=@"性别:";  
  51.       
  52.     studentLable.font=[UIFont systemFontOfSize:20];  
  53.       
  54.     [self.view addSubview:studentLable];  
  55.     [self.view addSubview:sNameLable];  
  56.     [self.view addSubview:sAgeLable];  
  57.     [self.view addSubview:sSexLable];  
  58.     [self.view addSubview:teacherLable];  
  59.     [self.view addSubview:tNameLable];  
  60.     [self.view addSubview:tSexLable];  
  61.       
  62.     sNameTextField=[[UITextField alloc] initWithFrame:CGRectMake(100, 60, 200, 30)];//初始化坐标位置  
  63.       
  64.     sNameTextField.placeholder = @"输入姓名";//为空白文本字段绘制一个灰色字符串作为占位符   
  65.       
  66.     sNameTextField.textAlignment = UITextAlignmentLeft;//默认就是左对齐,这个是UITextField扩展属性  
  67.       
  68.     sNameTextField.borderStyle=UITextBorderStyleRoundedRect;  //设置textField的形状  
  69.       
  70.     //    sNameTextField.clearsOnBeginEditing = NO;//设置为YES当用点触文本字段时,字段内容会被清除,这个属性一般用于密码设置,当输入有误时情况textField中的内容  
  71.       
  72.     sNameTextField.returnKeyType=UIReturnKeyDone;//设置键盘完成按钮  
  73.       
  74.     sNameTextField.delegate=self;//委托类需要遵守UITextFieldDelegate协议   
  75.       
  76.     sNameTextField.font = [UIFont systemFontOfSize:18]; //设置TextFiel输入框字体大小  
  77.       
  78.       
  79.     sAgeTextField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 200, 30)];  
  80.     sAgeTextField.textAlignment = UITextAlignmentLeft;  
  81.     sAgeTextField.borderStyle = UITextBorderStyleRoundedRect;  
  82.     sAgeTextField.keyboardType = UIKeyboardTypeNumberPad;//输入年龄需要设置数字键盘  
  83.       
  84.     [sAgeTextField addTarget:self action:@selector(textFieldDone:)  forControlEvents:UIControlEventTouchDown]; //用textFieldDone函数,实现关闭数字键盘  
  85.     sAgeTextField.delegate=self;  
  86.       
  87.       
  88.     sSexTextField = [[UITextField alloc] initWithFrame:CGRectMake(100, 140, 200, 30)];  
  89.     sSexTextField.textAlignment = UITextAlignmentLeft;  
  90.     sSexTextField.borderStyle = UITextBorderStyleRoundedRect;  
  91.     sSexTextField.returnKeyType=UIReturnKeyDone;  
  92.     sSexTextField.delegate=self;  
  93.       
  94.       
  95.     //  sNameTextField.enabled=NO;  //把 sNameTextField设置成无效,点击任何反应    
  96.       
  97.     tNameTextField = [[UITextField alloc] initWithFrame:CGRectMake(100, 240, 200, 30)];  
  98.     tNameTextField.textAlignment = UITextAlignmentLeft;  
  99.     tNameTextField.borderStyle = UITextBorderStyleRoundedRect;  
  100.       
  101.     tNameTextField.delegate=self;  
  102.       
  103.       
  104.     tSexTextField = [[UITextField alloc] initWithFrame:CGRectMake(100, 280, 200, 30)];  
  105.     tSexTextField.textAlignment = UITextAlignmentLeft;  
  106.     tSexTextField.borderStyle = UITextBorderStyleRoundedRect;  
  107.     tSexTextField.returnKeyType=UIReturnKeyDone;  
  108.     tSexTextField.delegate=self;  
  109.     tSexTextField.secureTextEntry = YES;  //安全设置,密文保护设置  
  110.       
  111.     //    测试用的TextField  
  112.     UITextField *testTextField = [[UITextField alloc] initWithFrame:CGRectMake(100, 400, 200, 30)];  
  113.     testTextField.textAlignment = UITextAlignmentLeft;  
  114.     testTextField.borderStyle = UITextBorderStyleRoundedRect;  
  115.     testTextField.returnKeyType=UIReturnKeyDone;  
  116.       
  117.       
  118.     testTextField.delegate=self;  
  119.       
  120.     //    把TextField添加到视图上  
  121.     [self.view addSubview:sNameTextField];  
  122.     [self.view addSubview:sAgeTextField];  
  123.     [self.view addSubview:sSexTextField];  
  124.     [self.view addSubview:tSexTextField];  
  125.     [self.view addSubview:tNameTextField];  
  126.     [self.view addSubview:testTextField];  
  127. }  

6.然后用代理方法处理的就是键盘的操作,因为当键盘弹起的时候,在最下面的lable和textField可能会键盘遮挡,

在ViewDidLoad中我们有这样sNameTextField.returnKeyType=UIReturnKeyDone一段代码,作用就是当编辑完成后键盘右下角出现一个Done键,如果是中文输入法出现的是确定键,然后调用代理方法textFieldShouldReturn,当我们按下Done时,键盘就会退出;

resignFirstResponder(交出自己的第一响应者的身份,可以重写函数,这样如果写出返回no的时候当调用这个方法的时候它会拒绝交出第一响应者的身份)

[cpp] view plaincopyprint?
  1. //按下Done按钮时调用这个方法,可让按钮消失  
  2. -(BOOL)textFieldShouldReturn:(UITextField *)textField  
  3. {  
  4.      
  5.     [textField resignFirstResponder];  
  6.     return YES;  
  7. }  

7.当需要输入数字时候的时候 sAgeTextField.keyboardType = UIKeyboardTypeNumberPad;可以自动切换到数字键盘,键盘的八种风格

typedefenum {  

    UIKeyboardTypeDefault,               // 默认键盘:支持所有字符  

    UIKeyboardTypeASCIICapable,          // 支持ASCII的默认键盘  

    UIKeyboardTypeNumbersAndPunctuation, // 标准电话键盘,支持+*#等符号  

    UIKeyboardTypeURL,                   // URL键盘,有.com按钮;只支持URL字符  

    UIKeyboardTypeNumberPad,             //数字键盘  

    UIKeyboardTypePhonePad,              // 电话键盘  

    UIKeyboardTypeNamePhonePad,          // 电话键盘,也支持输入人名字  

    UIKeyboardTypeEmailAddress,          // 用于输入电子邮件地址的键盘  

} UIKeyboar;

8.处理键盘遮挡视图的方法:

当开始点击textField会调用的方法 ,键盘高度216,当触摸高度在216一下extField时候,调整视图,把视图纵坐标向上增加216orign(0,-216),然后view视图的高度增加216像素,相当于视图为320*696像素,如果设置增加216像素给view视图,会出现键盘遮盖部分为一篇黑色区域背景,当退出键盘是黑色会显示出来,给人视觉效果体验不好;当对textField编辑结束时调用textFieldDidEndEditing方法,调整视图为初始位置,frame.origin.y =20;为什么把视图的原点坐标纵坐标设置为20,因为iphone视图最上面通知栏占了20个像素;

[cpp] view plaincopyprint?
  1. -(void)textFieldDidBeginEditing:(UITextField *)textField  
  2. {  
  3. //    键盘高度216  
  4.     if (textField.frame.origin.y>216) {  
  5.           
  6.     CGRect frame =  self.view.frame;  
  7.     frame.origin.y -=216;  
  8.     frame.size.height +=216;  
  9.     self.view.frame=frame;  
  10.     }  
  11.       
  12. }  
[cpp] view plaincopyprint?
  1. // 当对textField编辑结束时调用此方法,需要调整视图为初始位置  
  2. -(void)textFieldDidEndEditing:(UITextField *)textField  
  3. {  
  4.   
  5.         CGRect frame = self.view.frame;  
  6.         frame.origin.x=00;  
  7.         frame.origin.y =20;//为什么20,因为iphone视图最上面通知栏20个像素  
  8.         frame.size.height =480;  
  9.         self.view.frame=frame;  
  10.      
  11.   }  

9再附上其他几个委托方法源码

[cpp] view plaincopyprint?
  1. //TextField的委托方法  
  2.   
  3. -(BOOL)textFieldShouldEndEditing:(UITextField *)textField  
  4. {  
  5. //返回一个BOOL型值,指定是否循序文本字段编辑  
  6.     return YES;  
  7. }  
[cpp] view plaincopyprint?
  1. -(BOOL)textFieldShouldClear:(UITextField *)textField  
  2. {  
  3. //    返回一个BOOL值指明是否允许根据用户请求清除内容  可以设置在特定条件下才允许清除内容    
  4.     return YES;  
  5. }  

10.数字键盘并没有Done键,就不能退出按钮,通过[sAgeTextFieldaddTarget:selfaction:@selector(textFieldDone:) forControlEvents:UIControlEventTouchDown];

这个相当于给TextField增加了一个按钮的功能,调用textFieldDone,当向输入框编辑完内容后,再次点击输入框键盘就退出了;

[cpp] view plaincopyprint?
  1. //重写数字键盘的方法  
  2. -(void)textFieldDone:(id)sender{  
  3.  [sAgeTextField resignFirstResponder];  
  4. }  



附上源代码:http://download.csdn.net/detail/duxinfeng2010/4397401
原创粉丝点击