iOS NSString , NSMutableString 和富文本

NSString和NSMutableString的常用方法 :

    //NSString常用方法
    NSString *string = @"wangJiao";
    //首字母大寫
    NSLog(@"string: %@",[string capitalizedString]);
    //全部小寫
    NSLog(@"string: %@",[string lowercaseString]);
    //全部大寫
    NSLog(@"string: %@",[string uppercaseString]);

    NSString *baseStr = @"Someday U will know this";
    
    //判斷是否包含前后綴
    BOOL isHasS = [baseStr hasPrefix:@"Someday"];
    BOOL isHasT = [baseStr hasSuffix:@"this"];
    
    //分割字符串
    NSArray *array = [baseStr componentsSeparatedByString:@"a"];
    NSString *string1 = [array objectAtIndex:0];
    NSString *string2 = [array objectAtIndex:1];
    NSLog(@"string1:%@  string2:%@",string1,string2);
    
    //去除字符串首尾的空格和換行符
    NSString *text = [baseStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSLog(@"text:%@",text);
    
    //NSString替換字符串
    NSString *replaceString = [baseStr stringByReplacingOccurrencesOfString:@"U" withString:@"I"];
    NSLog(@"replaceString:  %@",replaceString);
    
    //NSMutableString常用方法
    NSMutableString *baseMulStr = [[NSMutableString alloc] initWithString:baseStr];

    //NSMutableString替換字符串
    //按位置替換
    [baseMulStr replaceCharactersInRange:NSMakeRange(0, 1) withString:@"a"];
    //按字符替換
    [baseMulStr stringByReplacingOccurrencesOfString:@"i" withString:@"u"];
    
    //拼接字符串
    [baseMulStr appendString:@"thing"];
    NSLog(@"string:%@",baseMulStr);
    
    //插入字符串
    [baseMulStr insertString:@"perhaps " atIndex:7];
    NSLog(@"string: %@",baseMulStr);
    
    //刪除字符串
    [baseMulStr deleteCharactersInRange:NSMakeRange(8, 1)];
    NSLog(@"String1: %@",baseMulStr);
 
    //判斷是否包含某個字符
   BOOL IsContain = [str containsString:@"+"];

    //注意判斷是否包含這個方法只支持iOS8以上的系統(tǒng), 要適配iOS7可以換下面這種方式實現(xiàn)
    NSRange range0 = [str rangeOfString:@"+"];
    if (range0.location == NSNotFound) 不包含, 否則包含"+"
  
   //使用范圍比較大的話, 可以擴展成一個方法
    + (BOOL) checkStrContainsString:(NSString *)rangeStr with:(NSString *)str
    {
        NSRange range = [str rangeOfString:rangeStr];
        if (range.location == NSNotFound) {
            return NO;
        }
        return YES ;
    }

   

**富文本簡單說明 : **

  • 和String 分為 NSString與NSMutableString一樣 , AttributeString也分為NSAttributedString,和NSMutableAttributedString,但是通常我都用NSMutableAttributedString ,因為一般我使用 AttributeString ,或多或少都想要改變它的某一屬性,而不是一個固定的屬性創(chuàng)建完字符串之后,屬性不再變化.
  • NSMutableAttributedString 繼承自 NSAttributedString ,它更能夠滿足我的需求, 以下主要介紹NSMutableAttributedString ,有涉及NSAttributedString 的地方會特別標出, 沒標出的就默認是NSMutableAttributedString 的方法和屬性 .

1.NSMutableAttributedString 分段設置文本屬性:

NSString * text = @"今天天氣好晴朗,嘿!處處百花香,嘿嘿嘿!!!明天星期二,后天就是星期三,再有兩天就又放假咯!吼吼吼~~~";
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:text];
NSDictionary *attributeDict = @{NSFontAttributeName: [UIFont systemFontOfSize:18.0],
                                        NSForegroundColorAttributeName: [UIColor redColor]};
NSDictionary *attributeDict1 = @{NSFontAttributeName: [UIFont systemFontOfSize:23.0],
                                         NSForegroundColorAttributeName: [UIColor colorWithRed:0.130 green:0.854 blue:0.345 alpha:1.000]};
[attrStr setAttributes:attributeDict1 range:NSMakeRange(0, 7)];
[attrStr setAttributes:attributeDict range:NSMakeRange(7, attrStr.length -7)];
兩種字體和顏色

2.在需要的范圍內加上屬性, 注意看"嘿嘿嘿"三個字變大了:

[attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:23.0] range:NSMakeRange(16, 3)];
具體范圍添加屬性

3.用屬性字典的方式實現(xiàn) 在需要的范圍內加上屬性, 注意看"!!"顏色變了:

[attrStr addAttributes:attributeDict1 range:NSMakeRange(20, 2)];
屬性字典實現(xiàn)添加屬性

4.刪除具體范圍內的屬性, 注意天星期字體變了:

[attrStr removeAttribute:NSFontAttributeName range:NSMakeRange(23, 3)];
刪除屬性

5.替換字符串, 注意"天天"被替換掉了:

[attrStr replaceCharactersInRange:NSMakeRange(1, 2) withString:@""];
字符串替換

6.插入帶屬性的字符串 :

NSMutableString *mutStr = attrStr.mutableString;
NSMutableAttributedString *tempStr1 = [[NSMutableAttributedString alloc] initWithString:@"插入的文字" attributes:attributeDict1];
NSMutableAttributedString *tempStr2 = [[NSMutableAttributedString alloc] initWithString:@"插入的文字"];
[attrStr insertAttributedString:tempStr1 atIndex:7];
插入屬性字符串

7.插入不帶屬性的字符串:

[attrStr insertAttributedString:tempStr2 atIndex:7];
插入不帶屬性字符串

8.拼接和刪除字符串, 效果不貼了:

[attrStr appendAttributedString:tempStr1];
[attrStr deleteCharactersInRange:NSMakeRange(3, 3)];

9.判斷字符串相等,取子字符串, 這兩個方法是繼承自NSAttributedString的

[attrStr isEqualToAttributedString:attrStr];
[attrStr attributedSubstringFromRange:NSMakeRange(3, 6)];

動態(tài)獲取文本size :

// NString 動態(tài)獲取文本size, 這個方法默認是一行, 所以如果文本很多的話, 寬度會無限增大
CGSize size = [text sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName, nil]];

// NString 寬度一定動態(tài)獲取文本高度
CGRect strRect = [text boundingRectWithSize:CGSizeMake(150, MAXFLOAT) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName : fontTemp} context:nil];

// NSAttributedString 寬度一定動態(tài)獲取文本高度
CGRect strRect = [attrStr boundingRectWithSize:CGSizeMake(150, MAXFLOAT) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil];

Tips: 高度一定, 動態(tài)獲取寬度, 只需高度寫死, 寬度無限大或0即可 ;

目前, 在UIKit中支持富文本的常用控件有四個:

  • UILabel
  • UITextField
  • UITextView
  • UIButton

除此之外, 還有一個相比來說不那么常用的控件也支持富文本, 并且在沒有用戶交互, 只展示文本的時候我更喜歡用它, 它就是CATextLayer , 我上面所有展示效果都是用CATextLayer實現(xiàn)的, 感興趣的童鞋可以看看我寫的另一篇文章CALayer及其子類(一) .

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抒抬,隨后出現(xiàn)的幾起案子吼砂,更是在濱河造成了極大的恐慌受楼,老刑警劉巖酒繁,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孽惰,死亡現(xiàn)場離奇詭異膳凝,居然都是意外死亡碑隆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門蹬音,熙熙樓的掌柜王于貴愁眉苦臉地迎上來上煤,“玉大人,你說我怎么就攤上這事著淆〗俸荩” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵牧抽,是天一觀的道長嘉熊。 經常有香客問我,道長扬舒,這世上最難降的妖魔是什么阐肤? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮讲坎,結果婚禮上孕惜,老公的妹妹穿的比我還像新娘。我一直安慰自己晨炕,他們只是感情好衫画,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓮栗,像睡著了一般削罩。 火紅的嫁衣襯著肌膚如雪瞄勾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天弥激,我揣著相機與錄音进陡,去河邊找鬼。 笑死微服,一個胖子當著我的面吹牛趾疚,可吹牛的內容都是我干的。 我是一名探鬼主播以蕴,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼糙麦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丛肮?” 一聲冷哼從身側響起赡磅,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腾供,沒想到半個月后仆邓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲜滩,經...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡伴鳖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了徙硅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榜聂。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗓蘑,靈堂內的尸體忽然破棺而出须肆,到底是詐尸還是另有隱情,我是刑警寧澤桩皿,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布豌汇,位于F島的核電站,受9級特大地震影響泄隔,放射性物質發(fā)生泄漏拒贱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一佛嬉、第九天 我趴在偏房一處隱蔽的房頂上張望逻澳。 院中可真熱鬧,春花似錦暖呕、人聲如沸斜做。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓤逼。三九已至笼吟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霸旗,已是汗流浹背赞厕。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留定硝,地道東北人皿桑。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蔬啡,于是被迫代替她去往敵國和親诲侮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內容