美文网首页Kevin的IOS开发专题iOS进阶高级
【IOS开发基础系列】UITextField专题

【IOS开发基础系列】UITextField专题

作者: Kevin_Junbaozi | 来源:发表于2018-03-27 22:01 被阅读11次

1 使用技巧

1.1 样式技巧

1.1.1 圆角边框

1. UITextField四周的圆角

textField.layer.cornerRadius = 5.0    需要导入框架QuartzCore.framework,并且在当前类中引用#import<QuartzCore/QuartzCore.h>

2. 光标过于靠前

        有时候, 当点击输入框时, 你会发现光标就快挨着左边框了, 很不明显, 这是个很小的用户体验, 解决也很容易, 设置一下UITextField的边框样式。

textField.borderStyle = UITextBorderStyleRoundedRect;

        这样就明显好看多了, 设置成这个样式后, 四周也会自带圆角, 并且有明显的凹凸效果。

1.1.2 边框颜色

self.layer.borderWidth = 1.0f;      //边框宽度

self.layer.borderColor = [[UIColor colorWithRed:213.0/255 green:213.0/255 blue:213.0/255 alpha:1.0] CGColor];  //边框颜色

1.1.3 文字内容不贴边框显示

    UIView *paddingView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 10, 20)];

    textField.leftView = paddingView;

    textField.leftViewMode = UITextFieldViewModeAlways;

1.1.4 文字长度自适应

TextKit学习通过boundingRectWithSize:options:attributes:context:计算文本尺寸

http://www.cnblogs.com/wjblogs/p/ios7-text.html

NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString: textView.text]; 

textView.attributedText = attrStr; 

NSRange range = NSMakeRange(0, attrStr.length); 

 // 获取该段attributedString的属性字典 

NSDictionary *dic = [attrStr attributesAtIndex: 0 effectiveRange: &range];  

// 计算文本的大小 

CGSize textSize = [textView.text boundingRectWithSize: textView.bounds.size options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes: dic  context: nil].size;// context上下文。包括一些信息,例如如何调整字间距以及缩放。该对象包含的信息将用于文本绘制。该参数可为nil 

NSLog(@"w =%f", textSize.width); 

NSLog(@"h = %f", textSize.height); 

IOS7以下适配方法:

IOS字符串自动计算文本的宽和高

http://my.oschina.net/u/2285956/blog/355843

ios6, ios7上文字长度计算问题, 可变长文字的自动适配显示

http://blog.csdn.net/smking/article/details/22221441

1.2 界面响应技巧

1.2.1 UItextField随键盘弹出而上移

(Good)为UITextField增加键盘偏移的模板化写法

http://www.cnblogs.com/ygm900/archive/2013/06/24/3152287.html

1.2.2 UIScrollView中处理UITextField被遮挡问题

//注册键盘监听消息

- (void) registerKeyBoardNotification

{

    //增加监听,当键盘出现或改变时收出消息    [核心代码]

    [[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object: nil];

    //增加监听,当键退出时收出消息

    [[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(keyboardWillHide:) name: UIKeyboardWillHideNotification object: nil];

}

//键盘显示

- (void) keyboardWillShow: (NSNotification*)aNotification

{

    //键盘弹出后的frame

    NSValue *keyboardBoundsValue = [[aNotification userInfo] objectForKey: UIKeyboardFrameEndUserInfoKey];

    CGRectkeyboardBounds;

    [keyboardBoundsValue getValue: &keyboardBounds];

    //设置新的内边距,这个内边距是UIScrollView的最后一行距离UIScrollView底边框的距离,

    //这样当该函数触发式,系统会将当前选中行距离窗口底边的距离设为该值,从而正好不被键盘遮盖住。

    UIEdgeInsets e = UIEdgeInsetsMake(0, 0, keyboardBounds.size.height, 0);

    [_loginScrollView setContentInset: e];

    //调整滑动条距离窗口底边的距离

    [_loginScrollView setScrollIndicatorInsets: e];

}

//键盘退出

- (void) keyboardWillHide: (NSNotification*)aNotification

{

    //键盘缩回后,恢复正常设置

    UIEdgeInsets e = UIEdgeInsetsMake(0, 0, 0, 0);

    [_loginScrollView setScrollIndicatorInsets: e];

    [_loginScrollView setContentInset: e];

}

1.2.3 全局退出软键盘

- (BOOL) textFieldShouldReturn: (UITextField*)textField

{

    [self.view endEditing: YES];

    return YES;

}

1.2.4 UITextField右侧小圆叉

_nickNameTextField.clearButtonMode = UITextFieldViewModeWhileEditing;

1.3 典型代码

    _nickNameTextField = [[UITextField alloc] initWithFrame: CGRectMake(0, 64 + 30, self.view.frame.size.width, 50)];

    //    _nickNameTextField.placeholder = @"在此输入昵称";

    NSString *namePlace = @"在此输入昵称";

    NSMutableAttributedString *attNamePlace = [[NSMutableAttributedString alloc] initWithString: namePlace];

    [attNamePlace addAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIFont systemFontOfSize: 15], NSFontAttributeName, nil] range: NSMakeRange(0, namePlace.length)];

    [_nickNameTextField setAttributedPlaceholder: attNamePlace];

    _nickNameTextField.textColor = [UIColor blackColor];

    _nickNameTextField.backgroundColor = [UIColor whiteColor];

    _nickNameTextField.layer.borderWidth = 2.0;

    _nickNameTextField.clearButtonMode = UITextFieldViewModeWhileEditing;

    _nickNameTextField.layer.borderColor = (__bridge CGColorRef)([UIColor blackColor]);

    _nickNameTextField.delegate = self;

    UIView *paddingView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 20, 20)];

    _nickNameTextField.leftView= paddingView;

    _nickNameTextField.leftViewMode = UITextFieldViewModeAlways;

1.3.1 过滤emoj表情

+ (BOOL) isContainsEmoji: (NSString*)string

{

    __block BOOL isEomji = NO;

   [string enumerateSubstringsInRange: NSMakeRange(0, [string length]) options: NSStringEnumerationByComposedCharacterSequences usingBlock:

     ^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL*stop) {

        const unichar hs = [substring characterAtIndex: 0];

        if (0xd800 <= hs && hs <= 0xdbff) {

            if (substring.length > 1) {

                 const unichar ls = [substring characterAtIndex: 1];

                 const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;

                 if (0x1d000 <= uc && uc <= 0x1f77f) {

                     isEomji =YES;

                 }

            }

        }

        else if (substring.length > 1) {

            const unichar ls = [substring characterAtIndex: 1];

            if (ls == 0x20e3) {

                 isEomji =YES;

            }

        }

        else{

            if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) {

                 isEomji =YES;

            }

            else if (0x2B05 <= hs && hs <= 0x2b07) {

                 isEomji =YES;

            }

            else if (0x2934 <= hs && hs <= 0x2935) {

                 isEomji =YES;

            }

            else if (0x3297 <= hs && hs <= 0x3299) {

                 isEomji =YES;

            }

            else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50|| hs == 0x231a) {

                 isEomji =YES;

            }

        }

    }];

    return isEomji;

}

/**

 *过滤系统表情字符

 */

+ (NSString*) filterEmoji: (NSString*)string

{

    NSUInteger len = [string lengthOfBytesUsingEncoding: NSUTF8StringEncoding];

    const char *utf8 = [string UTF8String];

    char *newUTF8 = malloc( sizeof(char) *len );

    int j =0;

    //0xF0(4) 0xE2(3) 0xE3(3) 0xC2(2) 0x30---0x39(4)

    for ( int i =0; i< len; i++ ) {

        unsigned intc =utf8;

        BOOL isControlChar = NO;

        if ( c == 4294967280 || c == 4294967089 || c == 4294967090 || c ==4294967091 || c ==4294967092 || c == 4294967093 || c == 4294967094 || c == 4294967095 || c == 4294967096 || c ==4294967097 || c == 4294967088) {

            i = i +3;

            isControlChar =YES;

        }

        if ( c == 4294967266 || c == 4294967267) {

            i = i +2;

            isControlChar =YES;

        }

        if ( c == 4294967234) {

            i = i +1;

            isControlChar =YES;

        }

        if(!isControlChar ) {

            newUTF8[j] = utf8;

            j++;

        }

    }

    newUTF8[j] ='\0';

    NSString *encrypted = [NSString stringWithCString: (const char*)newUTF8  encoding: NSUTF8StringEncoding];

    free(newUTF8 );

    return encrypted;

}

2 参考链接

UITextField的总结

http://www.cnblogs.com/wengzilin/archive/2012/03/13/2393985.html

UITextField的详细使用

http://www.cnblogs.com/top5/archive/2012/05/17/2506608.html

iOS中UITextField使用全面解析

http://www.3lian.com/edu/2012/11-08/43227.html

UITextField/UITextView选中时改变边框颜色

http://www.xuebuyuan.com/642503.html

UITextField的边框颜色

http://codego.net/105631/

ios上禁止输入表情

http://www.tuicool.com/articles/67FZb2

【iOS开发】屏蔽emoji表情输入

http://blog.sina.com.cn/s/blog_693de6100101c6rp.html

如何屏蔽系统输入表情  

http://www.cocoachina.com/bbs/read.php?tid=265492

请教一下,iOS7的中文输入法中,可否禁用系统自带的表情啊?

http://www.cocoachina.com/bbs/read.php?tid=179679

iOS自定义emoji表情键盘总结

http://blog.sina.com.cn/s/blog_6317728d0102vwjv.html

iOS自定义表情键盘改如何做

http://www.cocoachina.com/bbs/read.php?tid=286490

https://github.com/search?l=Objective-C&o=desc&q=emoj&s=stars&type=Repositories&utf8=✓

一文让你彻底了解iOS字体相关知识

http://ios.jobbole.com/83939/?utm_source=tuicool&utm_medium=referral

相关文章

网友评论

    本文标题:【IOS开发基础系列】UITextField专题

    本文链接:https://www.haomeiwen.com/subject/qchecftx.html