- (void)viewDidLoad
{
[super viewDidLoad];
//文本输入框 UITextField
UITextField *textField = [[UITextField alloc] init];
//设置
textField.frame = CGRectMake(50, 50, 200, 200);
//设置输入框中的文本 默认为空
textField.text = nil;
//设置输入框中的属性字符串,默认为空 如果不理解属性字符串,可以跳过
textField.attributedText = nil;
//设置默认的属性字符串
textField.defaultTextAttributes = nil;
//设置默认显示的属性字符串
textField.attributedPlaceholder = nil;
//设置输入框的文本颜色,默认为空,可不设置,因为系统设置为黑色
textField.textColor = [UIColor blackColor];
//设置背景颜色
textField.backgroundColor = [UIColor greenColor];
//设置输入框的字体,默认为空,可不设置,系统默认设置12pt
textField.font = [UIFont systemFontOfSize:18.0];
//设置背景图片 只有当设置外框类型为UITextBorderStyleNone时才有效
//textField.background = [UIImage imageNamed:@"1.png"];
//textField.disabledBackground = [UIImage imageNamed:@"2.png"];
//设置输入框变为密码框 每输入一个字符就变成点
textField.secureTextEntry = NO;
/*
typedef NS_ENUM(NSInteger, NSTextAlignment)
{
NSTextAlignmentLeft = 0, // 左对齐
#if iphone
NSTextAlignmentCenter = 1, // 居中
NSTextAlignmentRight = 2, // 右对齐
#else ipad
NSTextAlignmentRight = 1, // Visually right aligned
NSTextAlignmentCenter = 2, // Visually centered
#endif 其他
NSTextAlignmentJustified = 3, // 和段落对齐
NSTextAlignmentNatural = 4, // 默认状态 正常情况下
} NS_ENUM_AVAILABLE_IOS(6_0);
*/
//设置输入框的文字显示模式
textField.textAlignment = NSTextAlignmentNatural;
//设置默认显示的文字 70%透明度
textField.placeholder = @"请输入文字";
/*
typedef NS_ENUM(NSInteger, UITextBorderStyle) {
UITextBorderStyleNone, //无边框
UITextBorderStyleLine, //方角矩形 实线
UITextBorderStyleBezel, //方角矩形 实线
UITextBorderStyleRoundedRect //圆角矩形 带有透明度的线条
};*/
//设置外框类型
textField.borderStyle = UITextBorderStyleNone;
//设置输入框字体最小值
textField.minimumFontSize = 18.0;
//设置为YES时文本会自动缩小以适应文本窗口大小,默认是保持原来大小,而让长文本滚动
textField.adjustsFontSizeToFitWidth = NO;
/*
ypedef NS_ENUM(NSInteger, UIKeyboardType) {
UIKeyboardTypeDefault, // 默认状态,支持所有字符
UIKeyboardTypeASCIICapable, // 可以输入ASCII码
UIKeyboardTypeNumbersAndPunctuation, // 数字和标点符号
UIKeyboardTypeURL, // 字母和url(com)
UIKeyboardTypeNumberPad, // 数字键盘
UIKeyboardTypePhonePad, // 数字带+*# 电话键盘
UIKeyboardTypeNamePhonePad, // 电话键盘支持输入人名
UIKeyboardTypeEmailAddress, // 字母带@. 输入电子邮件
UIKeyboardTypeDecimalPad NS_ENUM_AVAILABLE_IOS(4_1), // 数字键盘带.
UIKeyboardTypeTwitter NS_ENUM_AVAILABLE_IOS(5_0), // 字母带@#
UIKeyboardTypeWebSearch NS_ENUM_AVAILABLE_IOS(7_0), // 字母带 前往 按钮
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, // 可以输入ASCII码 首字母大写
};
*/
//设置键盘的样式
textField.keyboardType = UIKeyboardTypeURL;
//当再次编辑输入框时 输入框的内容就会被清空
textField.clearsOnBeginEditing = NO;
//首字母是否大写
/*
typedef NS_ENUM(NSInteger, UITextAutocapitalizationType) {
UITextAutocapitalizationTypeNone, //全部小写
UITextAutocapitalizationTypeWords, //每个单词(中间有空格)的首字母大写
UITextAutocapitalizationTypeSentences, //第一个单词的首字母大写
UITextAutocapitalizationTypeAllCharacters, //全部大写
};
*/
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
/*
输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内
typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
UITextFieldViewModeNever, //默认显示没有
UITextFieldViewModeWhileEditing, //输入时显示有叉号
UITextFieldViewModeUnlessEditing, //不输入时显示有叉号
UITextFieldViewModeAlways //一直显示有叉号,
};
*/
textField.clearButtonMode = UITextFieldViewModeWhileEditing ;
/*
typedef enum {
UITextAutocorrectionTypeDefault, 默认
UITextAutocorrectionTypeNo, 不自动纠错
UITextAutocorrectionTypeYes, 自动纠错
} UITextAutocorrectionType;
*/
//是否纠错
textField.autocorrectionType = UITextAutocorrectionTypeNo;
/*
typedef NS_ENUM(NSInteger, UIReturnKeyType) {
UIReturnKeyDefault, //return键显示默认状态 return
UIReturnKeyGo, //return键显示Go
UIReturnKeyGoogle, //return键显示Search
UIReturnKeyJoin, //return键显示Join 加入
UIReturnKeyNext, //return键显示next 下一个
UIReturnKeyRoute, //return键显示Route
UIReturnKeySearch, //return键显示Search 搜索
UIReturnKeySend, //return键显示Send 发送
UIReturnKeyYahoo, //return键显示Search
UIReturnKeyDone, //return建显示Done
UIReturnKeyEmergencyCall,
};
*/
//设置return键的类型
textField.returnKeyType = UIReturnKeyDefault;
/*
typedef NS_ENUM(NSInteger, UIKeyboardAppearance) {
UIKeyboardAppearanceDefault, //默认外观 浅灰色
UIKeyboardAppearanceDark //深灰 石墨色
UIKeyboardAppearanceLight //浅灰色
UIKeyboardAppearanceAlert = UIKeyboardAppearanceDark, // 深灰 石墨色
};
*/
//设置键盘的外观
textField.keyboardAppearance = UIKeyboardAppearanceDefault;
//设置输入文字之间位置的view
UIImageView *image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1"]];
image.bounds = CGRectMake(0, 0, 10, 10);
textField.leftView = image;
//显示状态和 叉号 显示状态类似
textField.leftViewMode = UITextFieldViewModeAlways;
//设置输入框内部右侧位置的view
UIImageView *image1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"2"]];
image1.bounds = CGRectMake(0, 0, 10, 10);
textField.rightView = image1;
//显示状态和 叉号 显示状态类似
textField.rightViewMode = UITextFieldViewModeAlways;
textField.delegate = self;
[self.view addSubview:textField];
}
/*
重写绘制的各种方法
//重写来重置边缘区域
- (CGRect)borderRectForBounds:(CGRect)bounds;
//重写来重置文字区域
- (CGRect)textRectForBounds:(CGRect)bounds
{
//return CGRectInset(bounds, 50, 0);
CGRect inset = CGRectMake(bounds.origin.x+190, bounds.origin.y, bounds.size.width -10, bounds.size.height);//更好理解些
return inset;
};
//重写来重置占位符区域 也就是默认显示的区域
- (CGRect)placeholderRectForBounds:(CGRect)bounds
{
//return CGRectInset(bounds, 20, 0);
CGRect inset = CGRectMake(bounds.origin.x+100, bounds.origin.y, bounds.size.width -10, bounds.size.height);//更好理解些
return inset;
};
//重写来重置编辑区域
- (CGRect)editingRectForBounds:(CGRect)bounds
{
//return CGRectInset( bounds, 10 , 0 );
CGRect inset = CGRectMake(bounds.origin.x +10, bounds.origin.y, bounds.size.width -10, bounds.size.height);
return inset;
};
//重写来重置clearButton位置,改变size可能导致button的图片失真
- (CGRect)clearButtonRectForBounds:(CGRect)bounds
{
return CGRectMake(bounds.origin.x + bounds.size.width - 50, bounds.origin.y + bounds.size.height -20, 16, 16);
};
//重写来重置左边view区域
- (CGRect)leftViewRectForBounds:(CGRect)bounds
{
CGRect inset = CGRectMake(bounds.origin.x +10, bounds.origin.y, bounds.size.width-250, bounds.size.height);
return inset;
//return CGRectInset(bounds,50,0);
};
//重写来重置右边view区域
- (CGRect)rightViewRectForBounds:(CGRect)bounds;
//重写绘制改变文字属性,重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super
- (void)drawTextInRect:(CGRect)rect;
//重写绘制改变占位符属性,重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super
- (void)drawPlaceholderInRect:(CGRect)rect
{
//CGContextRef context = UIGraphicsGetCurrentContext();
//CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);
[[UIColororangeColor] setFill];
[[selfplaceholder] drawInRect:rectwithFont:[UIFontsystemFontOfSize:20]];
};
*/
#pragma mark - UITextFieldDelegate
//设置输入框,是否可以被修改
// NO将无法修改,不出现键盘
// YES可以修改,默认值
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
//开始编辑时获得焦点时,执行该方法
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
}
/*
返回BOOL值,指定是否允许文本字段接触,当编辑结束,文本字段会让出first responder
要想再用户结束编辑时阻止文本字段消失,可以返回NO
这对一些文本字段必须始终保持活跃状态的程序很有用,比如即使消息
*/
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
return NO;
}
//文本框结束编辑以后会调用
- (void)textFieldDidEndEditing:(UITextField *)textField
{
}
/*
当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法
这对于想要加入撤销选项的应用程序特别有用
可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用做审计用途
要防止文字被改变可以返回NO
这个方法的参数中又一个NSRange对象,指明了被改变文字的位置,建议修改的文本也再其中
*/
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
return YES;
}
//返回一个BOOL值指明是否允许根据用户请求清除内容
//可以设置在特定条件下才允许清除内容
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
return YES;
}
//返回一个BOOL值,指明是否允许在按下回车键时结束编辑
//如果允许要调用resignFirstResponder方法,会导致结束编辑,而键盘会被手气
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
return YES;
}
================== 限制字符输入长度================
当你尝试了各种方法还是不能很好地控制中英文的输入长度时,希望你能看到这里的解决方案
#define CourseNameMaxLength 10
//在控件上添加通知事件
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:) name:@"UITextFieldTextDidChangeNotification" object:cell.coursrNameText];
//离开视图前别忘了释放
-(void)dealloc{
[[NSNotificationCenter defaultCenter]removeObserver:self name:@"UITextFieldTextDidChangeNotification" object:_albumNameTextField];
}
//实现通知方法
-(void)textFiledEditChanged:(NSNotification *)obj{
UITextField *textField = (UITextField *)obj.object;
NSString *toBeString = textField.text;
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if (toBeString.length > CourseNameMaxLength) {
textField.text = [toBeString substringToIndex:CourseNameMaxLength];
}
}
// 有高亮选择的字符串,则暂不对文字进行统计和限制
else{
}
}
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else{
if (toBeString.length > CourseNameMaxLength) {
textField.text = [toBeString substringToIndex:CourseNameMaxLength];
}
}
}