ios计算字符串宽高,指定字符串变色,获取URL参数集合
#import <Foundation/Foundation.h> @interface NSString (Extension) - (CGFloat)heightWithLimitWidth:(CGFloat)width
fontSize:(CGFloat)fontSize
otherAttributes:(NSDictionary *)otherAttributes; - (CGFloat)widthWithLimitHeight:(CGFloat)height
fontSize:(CGFloat)fontSize
otherAttributes:(NSDictionary *)otherAttributes; - (CGSize)sizeWithLimitSize:(CGSize)size
fontSize:(CGFloat)fontSize
otherAttributes:(NSDictionary *)otherAttributes; - (CGRect)rectWithSize:(CGSize)size
fontSize:(CGFloat)fontSize
otherAttributes:(NSDictionary *)otherAttributes; //属性字符串 指定子串变色
- (NSMutableAttributedString *)attributedStringWithcolor:(UIColor *)color subString:(NSString *)subString; // 属性字符串 指定子串变色 多处
- (NSMutableAttributedString *)attributedStringWithColorArray:(NSArray *)colorArray subStringArray:(NSArray *)subStringArray; //属性字符串 指定子串改变显示效果
- (NSMutableAttributedString *)attributedStringWithAttributeds:(NSDictionary *)attributeds subString:(NSString *)subString;
/**
转变指定字符串 @param regArray 正则表达式数组
@param attributeds 指定属性
@return 返回的可变字符串
*/
- (NSMutableAttributedString *)changeStringWithReg:(NSArray *)regArray attributeds:(NSDictionary *)attributeds; // 将url中的参数转为字典
- (NSMutableDictionary *)getURLParameters; /**
插入图片 @param images 图片数组
@param font 字体
@param span 间距
@return 结果
*/
-(NSMutableAttributedString *)attributedStringWithImages:(NSArray<UIImage *> *)images font:(UIFont *)font imageSpan:(CGFloat)span; @end
#import "NSString+Extension.h" @implementation NSString (Extension) - (CGFloat)heightWithLimitWidth:(CGFloat)width
fontSize:(CGFloat)fontSize
otherAttributes:(NSDictionary *)otherAttributes { return [self rectWithSize:CGSizeMake(width, CGFLOAT_MAX)
fontSize:fontSize
otherAttributes:otherAttributes].size.height;
} - (CGFloat)widthWithLimitHeight:(CGFloat)height
fontSize:(CGFloat)fontSize
otherAttributes:(NSDictionary *)otherAttributes { return [self rectWithSize:CGSizeMake(CGFLOAT_MAX, height)
fontSize:fontSize
otherAttributes:otherAttributes].size.width;
} - (CGSize)sizeWithLimitSize:(CGSize)size
fontSize:(CGFloat)fontSize
otherAttributes:(NSDictionary *)otherAttributes { return [self rectWithSize:size
fontSize:fontSize
otherAttributes:otherAttributes].size;
} - (CGRect)rectWithSize:(CGSize)size
fontSize:(CGFloat)fontSize
otherAttributes:(NSDictionary *)otherAttributes { NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithDictionary:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}];
if (otherAttributes) {
for (NSString *aKey in otherAttributes.allKeys) {
id aValue = [otherAttributes objectForKey:aKey];
[dictionary setObject:aValue forKey:aKey];
}
} return [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:dictionary context:nil];
} - (NSMutableAttributedString *)attributedStringWithcolor:(UIColor *)color subString:(NSString *)subString
{
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:self];
if (![subString isKindOfClass:[NSString class]] || !subString.length) {
return attributedString;
} NSRange range = [self rangeOfString:subString];
if (range.location != NSNotFound) {
[attributedString addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(range.location, range.length)];
}
return attributedString;
} - (NSMutableAttributedString *)attributedStringWithColorArray:(NSArray *)colorArray subStringArray:(NSArray *)subStringArray
{
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:self];
NSInteger count = subStringArray.count;
if (count<2) {
return [self attributedStringWithcolor:colorArray[0] subString:subStringArray[0]];
} for (NSInteger i=0; i<count; i++) {
NSString *subString= subStringArray[i];
if (![subString isKindOfClass:[NSString class]] || !subString.length) {
return attributedString;
} NSRange range = [self rangeOfString:subString];
if (range.location != NSNotFound) {
[attributedString addAttribute:NSForegroundColorAttributeName value:colorArray[i] range:NSMakeRange(range.location, range.length)];
}
} return attributedString;
} - (NSMutableAttributedString *)attributedStringWithAttributeds:(NSDictionary *)attributeds subString:(NSString *)subString{ NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:self];
if (![subString isKindOfClass:[NSString class]] || !subString.length) {
return attributedString;
} NSRange range = [self rangeOfString:subString];
if (range.location != NSNotFound) { // [attributedString addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(range.location, range.length)];
[attributedString addAttributes:attributeds range:NSMakeRange(range.location, range.length)];
}
return attributedString;
} /**
转变指定字符串 @param regArray 正则表达式数组
@param attributeds 指定属性
@return 返回的可变字符串
*/
- (NSMutableAttributedString *)changeStringWithReg:(NSArray *)regArray attributeds:(NSDictionary *)attributeds{ NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:self];
for (int i=0; i<regArray.count; i++) { NSString *re = [regArray ty_ObjectWithIndex:i];
NSRegularExpression *regExp = [[NSRegularExpression alloc]initWithPattern:re
options:NSRegularExpressionDotMatchesLineSeparators
error:nil]; NSArray* match = [regExp matchesInString:self options:NSMatchingReportCompletion range:NSMakeRange(0, [self length])]; if (match.count != 0)
{
for (NSTextCheckingResult *matc in match)
{
NSRange range = [matc range]; [attr addAttributes:attributeds range:range];
}
} } return attr;
}
/**
插入图片 @param images 图片数组
@param font 字体
@param span 间距
@return 结果
*/
-(NSMutableAttributedString *)attributedStringWithImages:(NSArray<UIImage *> *)images font:(UIFont *)font imageSpan:(CGFloat)span{ NSMutableAttributedString *textAttrStr = [[NSMutableAttributedString alloc] init]; for (UIImage *img in images) { NSTextAttachment *attach = [[NSTextAttachment alloc] init];
attach.image = img;
CGFloat imgH = font.pointSize;
CGFloat imgW = (img.size.width / img.size.height) * imgH;
attach.bounds = CGRectMake(0, -2 , imgW, imgH); NSAttributedString *imgStr = [NSAttributedString attributedStringWithAttachment:attach];
[textAttrStr appendAttributedString:imgStr];
//标签后添加空格
[textAttrStr appendAttributedString:[[NSAttributedString alloc] initWithString:@" "]];
} [textAttrStr appendAttributedString:[[NSAttributedString alloc]initWithString:self]];
//设置间距
if (span != 0) {
[textAttrStr addAttribute:NSKernAttributeName value:@(span)
range:NSMakeRange(0, images.count * 2/*由于图片也会占用一个单位长度,所以带上空格数量,需要 *2 */)];
} return textAttrStr;
} - (NSMutableDictionary *)getURLParameters { // 查找参数
NSRange range = [self rangeOfString:@"?"];
if (range.location == NSNotFound) {
return nil;
} NSMutableDictionary *params = [NSMutableDictionary dictionary]; // 截取参数
NSString *parametersString = [self substringFromIndex:range.location + 1]; // 判断参数是单个参数还是多个参数
if ([parametersString containsString:@"&"]) { // 多个参数,分割参数
NSArray *urlComponents = [parametersString componentsSeparatedByString:@"&"]; for (NSString *keyValuePair in urlComponents) {
// 生成Key/Value
NSArray *pairComponents = [keyValuePair componentsSeparatedByString:@"="];
NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];
NSString *value = [pairComponents.lastObject stringByRemovingPercentEncoding]; // Key不能为nil
if (key == nil || value == nil) {
continue;
} id existValue = [params valueForKey:key]; if (existValue != nil) { // 已存在的值,生成数组
if ([existValue isKindOfClass:[NSArray class]]) {
// 已存在的值生成数组
NSMutableArray *items = [NSMutableArray arrayWithArray:existValue];
[items addObject:value]; [params setValue:items forKey:key];
} else { // 非数组
[params setValue:@[existValue, value] forKey:key];
} } else { // 设置值
[params setValue:value forKey:key];
}
}
} else {
// 单个参数 // 生成Key/Value
NSArray *pairComponents = [parametersString componentsSeparatedByString:@"="]; // 只有一个参数,没有值
if (pairComponents.count == 1) {
return nil;
} // 分隔值
NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];
NSString *value = [pairComponents.lastObject stringByRemovingPercentEncoding]; // Key不能为nil
if (key == nil || value == nil) {
return nil;
} // 设置值
[params setValue:value forKey:key];
} return params;
} @end
ios计算字符串宽高,指定字符串变色,获取URL参数集合的更多相关文章
- String的两个API,判断指定字符串是否包含另一字符串,在字符串中删除指定字符串。
// 在字符串中删除指定字符串. String phoneNum="1795112345"; phoneNum = phoneNum.replace("17951&quo ...
- java查找字符串里与指定字符串相同的个数
public class EmployeeDemo { //方法一: public int search(String str,String strRes) {//查找字符串里与指定字符串相同的个数 ...
- iOS xib View宽高不能改变
IOS - xib(Interface Builder,view) - can't change view size(view不能改变大小问题) 今天在试着swift语言写个demo,,当中遇到了这个 ...
- iOS - web自适应宽高(预设置的大小)
//web自适应宽高 -(void)webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"wessd"); [ webView s ...
- Swift计算文本宽高
iOS 8 开始可以配合 AutoLayout 自动估算文本的高度,但是当 Cell 比较复杂的时候,还会需要手动去计算.首先声明一个样式 var TextStyle : [String : NSOb ...
- Js删除字符串中的指定字符串
案例一. 比如:原字符串 var StringFirst = "12:30:08"; 现在要删掉冒号,变成123008 就可以先split var splitFirst = Str ...
- js判断字符串是否以指定字符串开头或是否包含指定字符串
1. 用js判断一个字符串是否是以某个子字符串开头如:ssss001是否以ssss开头, 可以这样做: 1 2 3 4 5 6 var fdStart = strCode.indexOf(" ...
- iOS计算字符串的宽度高度
OC开发中会遇到根据字符串和字体大小来算计算出字符串所占的宽高->> 封装方法如下: #import <Foundation/Foundation.h> #import < ...
- 【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词
一. 字符串 API 1. NSString 用法简介 (1) NSString API 介绍 NSString 功能 : -- 创建字符串 : 使用 init 开头的实例方法, 也可以使用 Stri ...
随机推荐
- 掌握Spark机器学习库-07-回归分析概述
1)回归与分类算法的区别 回归的预测结果是连续的,分类的预测结果是离散的. 2)spark实现的回归算法有: 3)通过相关系数衡量线性关系的程度
- mysql中int(1)与int(10)的区别
INT[(M)] [UNSIGNED] [ZEROFILL] 普通大小的整数.带符号的范围是-2147483648到2147483647.无符号的范围是0到4294967295. INT(1) 和 I ...
- Java之抽象和封装
① 如何从现实世界中抽象出类? 根据软件开发需求: 发现类-->发现类的属性-->发现类的方法 ② 构造方法的作用和特点是什么? 作用:在创建对象时执行一些初始化操作 ...
- iOS微信页面 长按图片出现【存储图像】和【拷贝】不出现【发送朋友】【保存图片】
最近遇到一大坑.微信加载的页面中出现图片,长按图片时不出现默认的菜单[发送朋友]等而是[存储图像]和拷贝. 原因:正常在页面中长按图片是没有问题的,但是如果你的页面嵌入了ifram然后又长按在ifra ...
- C/C++ 运算符重载、数据类型转换
1.运算符就是“+”.“>>”等符号,对运算符重载实质就是对函数的重载,这样运算符就能在原有基础上增加新功能,不能自己定义新运算符,只能对已有运算符重载,重载运算符后不能改变运算符本身的特 ...
- 迅为I.MX6DL开发板飞思卡尔Freescale Cortex A9 迅为-iMX6双核核心板
核心板参数 尺寸: 51mm*61mm CPU: Freescale Cortex-A9 双核精简版 i.MX6DL,主频 1.2 GHz 内存: 1GB DDR3 存储: 8GB EMMC 存储 E ...
- python连接mysql的操作
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
- CAD使用SetxDataString写数据(com接口)
主要用到函数说明: MxDrawEntity::SetxDataString 写一个字符串扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据名称 ...
- element-UI el-table二次封装
Part.1 为什么要二次封装? 这是 Element 网站的 table 示例: <template> <el-table :data="tableData" ...
- 03HibernateJAVA类与数据库表映射配置
HibernateJAVA类与数据库表映射配置