ios UITextField文本框基本使用,以及所有代理方法的作用
#import "ViewController.h"
#import "LQKeyBoard.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self aboutUITextFiled];
}
- (void)aboutUITextFiled{
//实例一个UITextFiled对象
UITextField *textFiled = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 40)];
// textFiled.backgroundColor = [UIColor redColor];
[self.view addSubview:textFiled];
//设置tag值
textFiled.tag = 987;
textFiled.delegate = self;
//常用属性
//1.输入框的样式
// UITextBorderStyleNone,//无样式
// UITextBorderStyleLine,//线型边框
// UITextBorderStyleBezel,//尖角边框
// UITextBorderStyleRoundedRect//圆角矩形 (圆角样式不能设置背景图片)
textFiled.borderStyle = UITextBorderStyleNone;
//2. 设置输入框的背景图片//圆角图片不支持背景图片设定
textFiled.background = [UIImage imageNamed:@"background_0"];
//3.输入内容的字体颜色
textFiled.textColor = [UIColor whiteColor];
//4. 输入内容的字体
textFiled.font = [UIFont systemFontOfSize:30];
//5.输入框内容,这个内容可以被编辑
textFiled.text = @"xiaoQiang";
//6.输入框提示语
textFiled.placeholder = @"我是小强";
//7.对齐方式
textFiled.textAlignment = NSTextAlignmentCenter;
//8. 设置输入框可交互
textFiled.enabled = YES;
// 9.设置禁用状态的背景图片
textFiled.disabledBackground = [UIImage imageNamed:@"background_1"];
//10.密文输入
textFiled.secureTextEntry = NO;
//11.当开始编辑的时候(点击输入框的时候)自动清空原来的内容
textFiled.clearsOnBeginEditing = YES;
// 11.5
/**
UITextFieldViewModeNever,//永不显示
UITextFieldViewModeWhileEditing,//当编辑的时候
UITextFieldViewModeUnlessEditing,//
UITextFieldViewModeAlways
**/
//12.清空按钮显示的时机
textFiled.clearButtonMode = UITextFieldViewModeWhileEditing;
//13. 输入框左、右视图
UIImageView *leftView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
leftView.image = [UIImage imageNamed:@"image_0"];
textFiled.leftView = leftView;
textFiled.leftViewMode = UITextFieldViewModeWhileEditing;
//右视图同左视图,把leftView改为rightView即可
// 一个视图不能同时作为输入框的左视图和右视图(类似于一视图不能有两个俯视图)
// UIKeyboardAppearanceDefault, //默认
// UIKeyboardAppearanceDark //黑暗键盘NS_ENUM_AVAILABLE_IOS(7_0),
// UIKeyboardAppearanceLight//比默认状态亮
// 14.关于键盘的样式
textFiled.keyboardAppearance = UIKeyboardAppearanceDefault;
// UIKeyboardTypeDefault,
// UIKeyboardTypeASCIICapable,
//UIKeyboardTypeNumbersAndPunctuation,//数字和符号键盘
// UIKeyboardTypeURL,
// UIKeyboardTypeNumberPad,// 数字键盘
// UIKeyboardTypePhonePad,//拨号键盘
// UIKeyboardTypeNamePhonePad,
// UIKeyboardTypeEmailAddress,
// UIKeyboardTypeDecimalPad
// UIKeyboardTypeTwitter
// UIKeyboardTypeWebSearch // UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable,
//15. 关于键盘的样式
textFiled.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
// UIReturnKeyDefault,//
// UIReturnKeyGo,//
// UIReturnKeyGoogle,
// UIReturnKeyJoin,
// UIReturnKeyNext,
// UIReturnKeyRoute,
// UIReturnKeySearch,//搜索
// UIReturnKeySend,//发送
// UIReturnKeyYahoo,
// UIReturnKeyDone,//
// UIReturnKeyEmergencyCall,
//16.关于return键的样式
textFiled.returnKeyType = UIReturnKeyGo;
// 17.首字母大写的样式
textFiled.autocapitalizationType = UITextAutocapitalizationTypeNone;
// UITextAutocapitalizationTypeNone, // 无(默认状态)//没有大写
// UITextAutocapitalizationTypeWords,//以单词大写,以空格区分空格
//UITextAutocapitalizationTypeSentences,//以句子大写 以点加空格来区分两句子的格式的。
//UITextAutocapitalizationTypeAllCharacters,//全部大写
// 18.自动纠错 //适合英文 中文没用
/*
UITextAutocorrectionTypeDefault,
UITextAutocorrectionTypeNo,
UITextAutocorrectionTypeYes,
*/
textFiled.autocorrectionType = UITextAutocorrectionTypeDefault;
//19. 自定义键盘
/*
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 100)];
textFiled.inputView = v;
// textFiled.inputAccessoryView //二级键盘
*/
//让键盘产生第一响应 键盘会自动弹起
[textField becomeFirstResponder];
//收起键盘
/*
1、点击键盘的return键
2、点击Button
3、点击空白处弹回键盘
*/
/*
手势
*/
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapClick)];
自定制方法/手势方法
- (void)tapClick{
UITextField * textField = (UITextField*)[self.window viewWithTag:100];
[textField resignFirstResponder];
}
- (void)buttonClick:(UIButton*)button{
//取消第一响应
UITextField * textFiled = (UITextField*)[self.window viewWithTag:100];
[textFiled resignFirstResponder];
}
LQKeyBoard *keyboard = [[LQKeyBoard alloc] initWithFrame:CGRectMake(0, 0, 0, 100)];
keyboard.delegate = self;
// textFiled.inputView = keyboard;
#所有代理方法作用
//20.常用协议方法 应用于renturn
// 点击背景
// - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//
// }
//#pragma mark ------- 关于输入框的常用协议方法 --------
// // 输入框点击了return键,当Return键被点击时调用 通常用于收回键盘
//- (BOOL)textFieldShouldReturn:(UITextField *)textField {
//
// // 收键盘, 取消第一响应者
// [textField resignFirstResponder];
//
// return YES;
// }
//文本输入框开始输入时调用
- (void)textFieldDidBeginEditing:(UITextField *)textField{
//将键盘弹出
NSLog(@"开始输入");
}
// // 输入框即将退出编辑状态
// // 返回值表示这个操作能否被完成。
// - (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
//
// NSLog(@"即将退出编辑");
// return NO;
// }
//
// // 输入框已经退出编辑状态,文本输入框结束输入时调用
// - (void)textFieldDidEndEditing:(UITextField *)textField {
//
// NSLog(@"已经退出编辑");
// //获取当前文本输入框中所输入的文字
// NSLog(@"所输入的内容为:%@",textField.text);
//例:判断账号书写形式是否正确 如果不正确提示填写错误 重新输入
NSLog(@"结束输入");
// }
//
}
- (void) changeText:(NSString *)text{
//在这个方法里,需要改变输入框的值
//1.拿到输入框对象
UITextField *textField = (UITextField *)[self.view viewWithTag:987];
//2.在原有内容的基础上,往后拼接内容
textField.text = [textField.text stringByAppendingString:text];
}
//文本输入框内容发生变化即会调用的方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
/*
NSLog(@"内容:%@",textField.text);//获取的是上一次所输入内容
NSLog(@"Location:%lu Length:%lu",range.location,range.length);//范围为当前文字的位置,长度为零
NSLog(@"==%@==",string);//实时获取当前输入的字符
*/
//需求 实时获取当前文本框中的所有文字
NSString * resultStr = [textField.text stringByAppendingString:string];
NSLog(@"%@",resultStr);
//可在该方法中判断所输入文字是否正确
return YES;
}
//了解
//是否允许文本输入框可以输入
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
return YES;
}
//是否允许文本输入框结束
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
//在该方法中可以通过判断文本长度限制键盘是否可以收回
return NO;
}
//是否允许被清除
- (BOOL)textFieldShouldClear:(UITextField *)textField{
NSLog(@"文字被清除");
return YES;
}
@end
#import
@protocol LQKeyBoardDelegate
//改变输入框的内容。
- (void) changeText:(NSString *)text;
@end
@interface LQKeyBoard : UIView
//声明一个代理
@property (nonatomic,weak)id delegate;
@end
#import "LQKeyBoard.h"
@implementation LQKeyBoard
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self createButtons];
}
return self;
}
//构建十个button
- (void)createButtons{
float width = [UIScreen mainScreen].bounds.size.width /5.f;
float height = 50;
NSArray *title = @[@"",@"",@"小",@"",@"",@"",@"",@"",@"",@""];
for (int i = 0; i < 10; i++ ) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
//设置frame
button.frame = CGRectMake((i % 5) * width, (i / 5) * height, width, height) ;
//设置标题
[button setTitle:title[i] forState: UIControlStateNormal];
[self addSubview:button];
//3.给button注册事件
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
}
}
- (void) buttonAction:(UIButton *) button{
//拿到button的标题 并且打印
NSString *title = [button titleForState:UIControlStateNormal];
NSLog(@"%@",title);
//在这里,我们需要把这个title 传到ViewContorl里面显示,所以,牵涉到一个回调,我们用两种方式来实现
//1.协议代理
//2.block回调
//让代理去做
if([self.delegate respondsToSelector:@selector(changeText:)]){
[self.delegate changeText:title];
}
}
@end