emoji、第三方键盘IQKeyboardManager、自定义
2018-07-30 本文已影响2人
平安喜乐698
目录
1. emoji
2. 第三方键盘IQKeyboardManager
3. 自定义字体
4. 文本自适应
5. UIColor
1.emoji
// 过滤emoji表情符号
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
// 限制苹果系统输入法 禁止输入表情
if ([[[UITextInputMode currentInputMode]primaryLanguage] isEqualToString:@"emoji"]) {
return NO;
}
// 禁止输入emoji表情
if ([self stringContainsEmoji:text]) {
return NO;
}
return YES;
}
// 判断是否输入了emoji 表情
- (BOOL)stringContainsEmoji:(NSString *)string{
__block BOOL returnValue = 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) {
returnValue = YES;
}
}
} else if (substring.length > 1) {
const unichar ls = [substring characterAtIndex:1];
if (ls == 0x20e3) {
returnValue = YES;
}
} else {
if (0x2100 <= hs && hs <= 0x27ff) {
returnValue = YES;
} else if (0x2B05 <= hs && hs <= 0x2b07) {
returnValue = YES;
} else if (0x2934 <= hs && hs <= 0x2935) {
returnValue = YES;
} else if (0x3297 <= hs && hs <= 0x3299) {
returnValue = YES;
} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {
returnValue = YES;
}else if (hs == 0x200d){
returnValue = YES;
}
}
}];
return returnValue;
}
2.第三方键盘IQKeyboardManager
pod 'IQKeyboardManager'
// 开启(默认开启)
[[IQKeyboardManager sharedManager] setEnable:true];
// 键盘距正在编辑的TF的距离
[[IQKeyboardManager sharedManager]setKeyboardDistanceFromTextField:10];
// 点击输入框以外收回键盘(默认:false)
[[IQKeyboardManager sharedManager]setShouldResignOnTouchOutside:true];
// 是否显示键盘上方工具条(默认:true)
[[IQKeyboardManager sharedManager]setEnableAutoToolbar:false];
// 键盘上方toolBar是否显示placeHoolder(默认:true)
[[IQKeyboardManager sharedManager]setShouldShowToolbarPlaceholder:false];
// 键盘上方toolBar文本填充色
[[IQKeyboardManager sharedManager]setToolbarTintColor:[UIColor blueColor]];
// 键盘上方toolBar的placeHolder字体
[[IQKeyboardManager sharedManager] setPlaceholderFont:[UIFont systemFontOfSize:18]];
// 管理TF(根据tag)上下箭头 (IQAutoToolbarBySubviews 根据添加顺序 IQAutoToolbarByPosition 根据坐标位置)
[[IQKeyboardManager sharedManager]setToolbarManageBehaviour:IQAutoToolbarByTag];
// 键盘右上角完成按钮 文本
[[IQKeyboardManager sharedManager]setToolbarDoneBarButtonItemText:@"右上方按钮文本"];
// 键盘右上角完成按钮 图片
[[IQKeyboardManager sharedManager] setToolbarDoneBarButtonItemImage:[UIImage imageNamed:@""]];
// 是否可以向下上,向下上
[[IQKeyboardManager sharedManager]canGoNext];
[[IQKeyboardManager sharedManager]canGoPrevious];
[[IQKeyboardManager sharedManager]goNext];
[[IQKeyboardManager sharedManager]goPrevious];
3. 自定义字体
1. 导入字体文件
下载所需ttf文件,复制到项目中
Info.plist中 Fonts provided by application | 字体名.ttf …
项目 | Build Phases | Copy Bundle Resources 中导入字体
2. 寻找字体名
NSArray *familyNames = [UIFont familyNames];
for( NSString *familyName in familyNames ){
NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];
for( NSString *fontName in fontNames ){
printf( "\tFont: %s \n", [fontName UTF8String] );
}
}
打印所有字体名,找到相对应添加的字体名(不能直接使用ttf文件名作为字体名)
3. 使用
#define YTFont_YHS(x) [UIFont fontWithName:@"MicrosoftYaHei-Bold" size:(x)]
4. 宽度或高度自适应
label.numberOfLines=0 // 多行
// 获取文本高((最大宽:求高时必须和label宽度一致,最大高),,字体必须和label字体大小一致,nil)
labelHeight=str.boundingRectWithSize(CGSizeMake(300, 300), options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName:UIFont.systemFontOfSize(13)], context: nil).size.height
[cell]
思想一:
model中+ height:CGFloat!
str:String!{
didSet{
height=(str as NSString).boundingRectWithSize(CGSizeMake(300, 300), options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName:UIFont.systemFontOfSize(13)], context: nil).size.height
}
}
cell中 setModel()中重设label的frame(或使用 自动布局)
VC中 heightForCell中 return 没有此label时的高度+(dataArr[indexPath.row] as! model).height
思想二:
新建Frame文件:将frame全部放在此文件中计算,+ height、各种控件Frame、model
// 获取text高度2
[cell.texLabel textRectForBounds:CGRectMake(100, 5, RZSCREENWIDTH-120, 500) limitedToNumberOfLines:0];
5. UIColor
通常控件.alpha是不改的,改背景色.alpha (如果改变label的alpha则它的标题也是透明的)
let c=UIColor.greenColor() // 创建
let c=UIColor.init(red: 120/255.0, green: 120/255.0, blue: 120/255.0, alpha: 1) // 创建
let c=UIColor.init(white: 0.5, alpha: 0.5) // white:红绿蓝0.5 alpha:0.5
let c=UIColor.init(patternImage:UIImage(named:”1.png”)). // 不对图片进行缩放,超出屏幕则裁剪,少则重复添加
let c=UIColor.clearColor() // 透明色
let c=UIColor.yellowColor().colorWithAlphaCompoent(0.5) // 创建(透明度0.0~1.0)