UITextField基本概念&&限制字符的输入长度(包括中文字符)

来源:互联网 发布:淘宝怎么设置千人千面 编辑:程序博客网 时间:2024/05/15 08:21
- (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];        }      }  }
0 0