Weex自定義WXRichText組件實(shí)踐

更新:如果想實(shí)現(xiàn),簡(jiǎn)單的行間距的犀斋,可利用

style="line-height:30px"

利用這個(gè)行高屬性贝乎,可以模擬出行間距的效果,不過(guò)得根據(jù)字號(hào)大小來(lái)調(diào)整這個(gè)值叽粹。

更新:自定義太麻煩了览效,直接用weex-ui里的組件吧蒙具。

需求

image.png

帶行間距、電話下劃線朽肥,電話可撥打,電話不顏色

官方資料
http://weex-project.io/cn/references/advanced/extend-to-ios.html

操作流程

#import <WeexSDK/WeexSDK.h>

@interface WXRichText : WXComponent

@end

#import "WXRichText.h"
#import "TTTAttributedLabel+TipsLabel.h"
@interface WXRichText()<TTTAttributedLabelDelegate>
/// 這個(gè)組件我們需要用到TTTAttributedLabel來(lái)實(shí)現(xiàn)
@property (weak, nonatomic)  TTTAttributedLabel *label3;
// 以下的屬性用于記錄從weex傳過(guò)來(lái)的屬性
@property(nonatomic, strong) UIColor *normalColor;
@property(nonatomic, strong) UIColor *specialColor;
@property(nonatomic, strong) UIFont *font;
@property(nonatomic, copy) NSString *text;
@property(nonatomic, copy) NSString *specialText;
@property(nonatomic, assign) CGFloat maxWidth;
@property(nonatomic, assign) CGFloat lineSpacing;


@end
@implementation WXRichText

-(instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
{
    if(self= [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]){
        _normalColor = [UIColor colorWithHexString:styles[@"normalColor"]];
        _specialColor = [UIColor colorWithHexString:styles[@"specialColor"]];
        _font = [UIFont systemFontOfSize:[styles[@"fontSize"] floatValue]];
        
//        從weex傳字符串過(guò)來(lái)會(huì)帶有 '  '持钉,得手動(dòng)去除衡招,請(qǐng)大神給個(gè)優(yōu)化
        NSMutableString *muText =  [NSString stringWithFormat:@"%@" ,styles[@"text"]].mutableCopy;
        if ([muText hasPrefix:@"'"]) {
            _text = [muText stringByReplacingOccurrencesOfString:@"'" withString:@""];
        }
        if ([muText hasPrefix:@"'"]) {
            _text = [muText stringByReplacingOccurrencesOfString:@"'" withString:@""];
        }
        _specialText = [styles[@"specialText"] stringByReplacingOccurrencesOfString:@"'" withString:@""];

        _maxWidth = [styles[@"width"] floatValue];
        _lineSpacing = [styles[@"lineSpacing"] floatValue];

    }
    return self;
}

- (UIView *)loadView {
// 這里我們給控件一些初始化默認(rèn)的數(shù)據(jù)
    TTTAttributedLabel *label = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero];
    label.textColor = [UIColor colorWithHexString:@"0x888888"];
    label.numberOfLines   = 0;
    label.font            = [UIFont systemFontOfSize:14];
    label.lineSpacing = 8;
    label.lineBreakMode   = NSLineBreakByWordWrapping;
    NSString *text = @"3、如有疑問(wèn)每强,請(qǐng)撥打客服電話400-100-8899始腾,我們將竭誠(chéng)為您服務(wù)。";
    label.text            = text;
    self.label3 = label;

    [label sizeToFit];
    return label;
}
-(void)viewDidLoad {
    
    self.label3.delegate = self;
    NSDictionary *dict = @{(__bridge NSString *)kCTUnderlineStyleAttributeName : [NSNumber numberWithInteger:NSUnderlineStyleSingle],(NSString *)kCTForegroundColorAttributeName : (__bridge id)[_specialColor CGColor]};
    self.label3.linkAttributes = dict;
    self.label3.activeLinkAttributes = dict;
    TTTAttributedLabel *label = self.label3;
    label.textColor = _normalColor;
    label.numberOfLines   = 0;
    label.font            = _font;
    label.lineSpacing = _lineSpacing;
    label.lineBreakMode   = NSLineBreakByWordWrapping;
    NSString *text = _text;
    label.text = text;
    [self.label3 addLinkToTransitInformation:@{@"actionStr" : @"callServePhone"} withRange:[text rangeOfString:_specialText]];

    /// 這里這個(gè)可做到讓label自適應(yīng)空执,不管weex對(duì)此label設(shè)置了高度沒
    [self.label3 sizeToFit];
    
}
#pragma mark - TTTAttributedLabelDelegate
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithTransitInformation:(NSDictionary *)components{
    
    [self callConsumerHotline];
}

@end

weex布局處理

template里加入組件

<richText class = "richText" ></richText>

style里配置參數(shù)

.richText {
        font-size: 18;
        normalColor: #888888;
        text:'2. 如有疑問(wèn)浪箭,請(qǐng)撥打客服電話400-100-8899,我們將竭誠(chéng)為您服務(wù)辨绊。';
        specialColor: #F45861;
        specialText:'400-100';
        lineSpacing: 8;
        width: 750;
/// 高度不用限定奶栖,ios 使用sizeToFit可自適應(yīng),安卓未知门坷。
        /*height: 900;*/
    }

代碼寫得太匆忙宣鄙,有時(shí)間優(yōu)化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末默蚌,一起剝皮案震驚了整個(gè)濱河市冻晤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绸吸,老刑警劉巖鼻弧,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锦茁,居然都是意外死亡攘轩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門蜻势,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)撑刺,“玉大人,你說(shuō)我怎么就攤上這事握玛」话” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵挠铲,是天一觀的道長(zhǎng)冕屯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拂苹,這世上最難降的妖魔是什么安聘? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上浴韭,老公的妹妹穿的比我還像新娘丘喻。我一直安慰自己真椿,他們只是感情好狐粱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布丽已。 她就那樣靜靜地躺著祭示,像睡著了一般挟纱。 火紅的嫁衣襯著肌膚如雪丑孩。 梳的紋絲不亂的頭發(fā)上焚刺,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天病线,我揣著相機(jī)與錄音窟感,去河邊找鬼讨彼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柿祈,可吹牛的內(nèi)容都是我干的哈误。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼谍夭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼黑滴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起紧索,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤袁辈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后晚缩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媳危,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年荞彼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片待笑。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸣皂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出暮蹂,到底是詐尸還是另有隱情寞缝,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布仰泻,位于F島的核電站荆陆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏集侯。R本人自食惡果不足惜被啼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一帜消、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浓体,春花似錦泡挺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至咳促,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勘伺,已是汗流浹背跪腹。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留飞醉,地道東北人冲茸。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缅帘,于是被迫代替她去往敵國(guó)和親轴术。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 介紹 weex是阿里出品的一個(gè)類似RN的框架钦无,可以使用前端技術(shù)來(lái)開發(fā)移動(dòng)應(yīng)用逗栽,實(shí)現(xiàn)一份代碼支持H5,iOS和And...
    不知者謂我何求閱讀 2,247評(píng)論 1 4
  • 前言 Weex為了提高Native的極致性能失暂,做了很多優(yōu)化的工作 為了達(dá)到所有頁(yè)面在用戶端達(dá)到秒開彼宠,也就是網(wǎng)絡(luò)(J...
    一縷殤流化隱半邊冰霜閱讀 13,329評(píng)論 11 73
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,406評(píng)論 2 45
  • 嘿弟塞!大家好凭峡!我是大笑!歡迎來(lái)到大笑的《胡說(shuō)八道》欄目决记,感謝CCTV摧冀,感謝大家的不嫌棄。 今天的閱讀...
    許小冷閱讀 223評(píng)論 0 1
  • 游泳班已經(jīng)報(bào)名系宫,寶貝開始學(xué)習(xí)之旅索昂。其他都好,唯一是寶貝兒膽小笙瑟,懼怕水楼镐。這可能會(huì)延長(zhǎng)寶貝兒的學(xué)習(xí)時(shí)間! 我的目標(biāo)是學(xué)...
    靜澤福淼閱讀 73評(píng)論 0 0