当前位置: 编程技术>移动开发
本页文章导读:
▪判断是不是是 emoji表情 判断是否是 emoji表情
+ (BOOL)stringContainsEmoji:(NSString *)string
{
__block BOOL returnValue = NO;
[string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:.........
▪ performSelector:withObject:afterDelay:调用无效的解决办法 performSelector:withObject:afterDelay:调用无效的解决方法
performSelector:withObject:afterDelay:调用后,指定的@selecter()没有执行,[NSTimer timerWithTimeInterval:invocation:repeats:]也存在这个问题。反复验证后发现,.........
▪ 2013.6.25小结——界面布局小技巧 2013.6.25总结——界面布局小技巧
1.对于上下平分的两栏样式一样的布局,可用一个LinearLayout包起来,设置这两栏的layout_weight都为1,layout_height 为0dp
2.padding是整个控件往某个方向移,margin.........
[1]判断是不是是 emoji表情
来源: 互联网 发布时间: 2014-02-18
判断是否是 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]; // surrogate pair 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 { // non surrogate 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; } } }]; return returnValue; }
[2] performSelector:withObject:afterDelay:调用无效的解决办法
来源: 互联网 发布时间: 2014-02-18
performSelector:withObject:afterDelay:调用无效的解决方法
performSelector:withObject:afterDelay:调用后,指定的@selecter()没有执行,[NSTimer timerWithTimeInterval:invocation:repeats:]也存在这个问题。反复验证后发现,这种现象出现在子线程中,主线程中可正常使用。因此必须保证调用performSelector:withObject:afterDelay:是在主线程中。
因此,可以使用GCD的方式,将此调用放在主线程中执行:
dispatch_async(dispatch_get_main_queue(), ^{ });
[3] 2013.6.25小结——界面布局小技巧
来源: 互联网 发布时间: 2014-02-18
2013.6.25总结——界面布局小技巧
1.对于上下平分的两栏样式一样的布局,可用一个LinearLayout包起来,设置这两栏的layout_weight都为1,layout_height 为0dp
2.padding是整个控件往某个方向移,margin是控件中的内容往某个方向移动
3.LinearLayout中的
android:gravity="center_vertical"
属性可以让这个布局中的所有控件垂直居中
4.EditText中的
android:singleLine="true"
使得输入的时候敲回车直接跳到下一行
最新技术文章: