07-NSAttributedString(圖文混排)

一、 NSAttributedString

  • 帶有屬性的字符串, 富文本
  • 由2部分組成
    • 文字內(nèi)容 : NSString *
    • 文字屬性 : NSDictionary *
      • 文字顏色 - NSForegroundColorAttributeName
      • 字體大小 - NSFontAttributeName
      • 下劃線 - NSUnderlineStyleAttributeName
      • 背景色 - NSBackgroundColorAttributeName
  • 初始化
NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
attributes[NSForegroundColorAttributeName] = [UIColor yellowColor];
attributes[NSBackgroundColorAttributeName] = [UIColor redColor];
attributes[NSUnderlineStyleAttributeName] = @YES;
NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"123" attributes:attributes];
  • 使用場合
    • UILabel - attributedText
    • UITextField - attributedPlaceholder

例如:

111.png

(label先進(jìn)行連線)

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *label;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
    attributes[NSForegroundColorAttributeName] = [UIColor yellowColor];
    attributes[NSBackgroundColorAttributeName] = [UIColor redColor];
    attributes[NSUnderlineStyleAttributeName] = @YES;
    NSAttributedString *string = [[NSAttributedString alloc] initWithString:self.label.text attributes:attributes];
    self.label.attributedText = string;
    
}

二廊敌、 NSMutableAttributedString

  • 繼承自NSAttributedString
  • 常見方法
// 設(shè)置range范圍的屬性, 重復(fù)設(shè)置同一個范圍的屬性, 最后一次設(shè)置才是有效的(之前的設(shè)置會被覆蓋掉)
- (void)setAttributes:(nullable NSDictionary<NSString *, id> *)attrs range:(NSRange)range;
// 添加range范圍的屬性, 同一個范圍, 可以不斷累加屬性
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
- (void)addAttributes:(NSDictionary<NSString *, id> *)attrs range:(NSRange)range;
  • 圖文混排

效果圖:


1.png
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(100, 100, 200, 25);
label.backgroundColor = [UIColor redColor];
label.font = [UIFont systemFontOfSize:14];
[self.view addSubview:label];

// 圖文混排
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] init];
// 1 - 你好
NSAttributedString *first = [[NSAttributedString alloc] initWithString:@"你好"];
[attributedText appendAttributedString:first];

// 2 - 圖片
// 帶有圖片的附件對象
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"AppIcon29x29"];
CGFloat lineH = label.font.lineHeight;
attachment.bounds = CGRectMake(0,- ((label.frame.size.height - lineH) * 0.5 - 1), lineH, lineH);
// 將附件對象包裝成一個屬性文字
NSAttributedString *second = [NSAttributedString 
![1.png](http://upload-images.jianshu.io/upload_images/3680843-f9a91ffeeb2da243.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)attributedStringWithAttachment:attachment];
[attributedText appendAttributedString:second];

// 3 - 哈哈哈
NSAttributedString *third = [[NSAttributedString alloc] initWithString:@"哈哈哈"];
[attributedText appendAttributedString:third];

label.attributedText = attributedText;
  • 一個Label顯示多行不同字體的文字
    效果圖:


    1.png
UILabel *label = [[UILabel alloc] init];
// 設(shè)置屬性文字
NSString *text = @"你好\n哈哈哈";
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text];
[attributedText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:10] range:NSMakeRange(0, text.length)];
[attributedText addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:13] range:NSMakeRange(3, 3)];
label.attributedText = attributedText;
// 其他設(shè)置
label.numberOfLines = 0;
label.textAlignment = NSTextAlignmentCenter;
label.frame = CGRectMake(100, 100, 100, 40);
[self.view addSubview:label];
self.navigationItem.titleView = label;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛛蒙,一起剝皮案震驚了整個濱河市赡盘,隨后出現(xiàn)的幾起案子盒犹,更是在濱河造成了極大的恐慌捡遍,老刑警劉巖锌订,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異画株,居然都是意外死亡辆飘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門谓传,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜈项,“玉大人,你說我怎么就攤上這事续挟〗糇洌” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵诗祸,是天一觀的道長跑芳。 經(jīng)常有香客問我,道長贬媒,這世上最難降的妖魔是什么聋亡? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任肘习,我火速辦了婚禮际乘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漂佩。我一直安慰自己脖含,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布投蝉。 她就那樣靜靜地躺著养葵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瘩缆。 梳的紋絲不亂的頭發(fā)上关拒,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音庸娱,去河邊找鬼着绊。 笑死,一個胖子當(dāng)著我的面吹牛熟尉,可吹牛的內(nèi)容都是我干的归露。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼斤儿,長吁一口氣:“原來是場噩夢啊……” “哼剧包!你這毒婦竟也來了恐锦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤疆液,失蹤者是張志新(化名)和其女友劉穎一铅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枚粘,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡馅闽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了馍迄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片福也。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖攀圈,靈堂內(nèi)的尸體忽然破棺而出暴凑,到底是詐尸還是另有隱情,我是刑警寧澤赘来,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布现喳,位于F島的核電站,受9級特大地震影響犬辰,放射性物質(zhì)發(fā)生泄漏嗦篱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一幌缝、第九天 我趴在偏房一處隱蔽的房頂上張望灸促。 院中可真熱鬧,春花似錦涵卵、人聲如沸浴栽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽典鸡。三九已至,卻和暖如春坏晦,著一層夾襖步出監(jiān)牢的瞬間萝玷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工昆婿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留球碉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓挖诸,卻偏偏與公主長得像汁尺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子多律,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容