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的边框颜色
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
网友评论