YYKit之YYLabel
本文只對富文字中部分文字新增點選事件做簡單介紹
1.新增點選事件
YYLabel中給部分文字新增點選事件主要是在富文字排版的時候,建立YYTextHighlight物件,設定Range,並可以可以給他賦值一個JSON字典以便在之後點選文字之後可以獲取到內容(如@{@"action":@"comment"}).
設定YYTextHighlight的時候同時可以設定YYTextBorder,也就是背景顏色以及圓角等等,再點選的時候看起來不會顯得空洞,有直觀的反饋
設定富文字的程式碼如下
NSString *showStr = @"我有一頭小毛驢,從來也不騎~~";
NSMutableAttributedString *authorSayAtt = [[NSMutableAttributedString alloc] initWithString:showStr];
[authorSayAtt setColor:[UIColor blackColor]];
//YYTextBorder設定點選的背景顏色,圓角
YYTextBorder *textBoder = [YYTextBorder new];
textBoder.insets = UIEdgeInsetsMake(0, 0, 0, 0);
textBoder.cornerRadius = 5;
textBoder.fillColor = UIColorFromRGB(0xd7d7d7);
//給文字設定Highlight
YYTextHighlight *hightLight = [YYTextHighlight new];
[hightLight setBackgroundBorder:textBoder];
[authorSayAtt setTextHighlight:hightLight range:[showStr rangeOfString:@"毛驢"]];
YYTextContainer *container = [[YYTextContainer alloc] init];
container.size = CGSizeMake(windWidth-kReaderLeftSpace*2, CGFLOAT_MAX);
YYTextLayout *layout = [YYTextLayout layoutWithContainer:container text:authorSayAtt];
//此處的YYTextLayout可以計算富文字的高度,他有一個屬性textBoundingRect和textBoundingSize,container.size是用來限制寬度的,可以計算高度
//YYTextLayout是用來賦值給YYLabel,相當於UILabel的attributedText
//如果單純的做點選處理可以用attributedText直接賦值給YYLabel,但是如果需要非同步渲染就必須用YYTextLayout
然後在初始化YYLabel的地方,呼叫YYLabel的highlightTapAction屬性就可以獲取到點選的區域,文字資訊等
-(YYLabel *)authorSayLabel
{
if (!_authorSayLabel) {
_authorSayLabel = [[YYLabel alloc] init];
_authorSayLabel.highlightTapAction = ^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
YYLabel *useLabel = (YYLabel *)containerView;
NSAttributedString *attribute = useLabel.textLayout.text;
if (range.location >= text.length) {
return ;
}
YYTextHighlight *heightLight = [attribute attribute:YYTextHighlightAttributeName atIndex:range.location];
NSDictionary *dic = heightLight.userInfo;
DLog(@"攜帶的值===%@",dic);
//此處的dic,就是之前設定富文字時的字典
};
}
return _authorSayLabel;
}
2.關於YYLabel設定點選事件不響應的問題,主要有幾個方面
(1).頁面是否有其他的手勢,例如UITapGestureRecognizer,如果有,需要設定其屬性cancelsTouchesInView和delaysTouchesBegan都為NO
(2).YYLabel是否新增在了滑動檢視上面,如果是需要設定滑動檢視的屬性delaysContentTouches為NO(canCancelContentTouches預設為YES,不需改動)
(3).YYLabel新增在了滑動檢視上(如UIScrollVIew上),並且滑動檢視上還有UITapGestureRecognizer手勢,這個時候需要同時設定以上設定的三個屬性,否則有一種奇怪現象,點選文字的時候如果輕點會先走UITapGestureRecognizer的方法,再走YYLabel的highlightTapAction點選事件(右或者不走),稍用力點選才能夠正常先走YYLabel的highlightTapAction,再觸發UITapGestureRecognizer的事件方法
相關文章
- YYKit--YYWeakProxy
- YYKit原始碼探究(五十四) —— NSDate分類之Date modify(二)原始碼
- YYKit原始碼講解(4)原始碼
- YYKit(Base模組)學習筆記筆記
- YYKit 原始碼學習使用 1原始碼
- iOS簡單高效能標籤TagView(巧用YYLabel)iOSView
- oracle之 RAC Interconnect之HAIPOracleAI
- 漢字之美,拼音之韻
- Python基礎之(三)之字典Python
- 設計模式之禪之代理模式設計模式
- 程式碼之美---遞迴之美遞迴
- 科學之抽象管理之提升抽象
- JavaScript之thisJavaScript
- 若之
- 深入Spring之IOC之載入BeanDefinitionSpringBean
- PHP之string之ord()函式使用PHP函式
- 《碼農翻身》之浪潮之巔的WebWeb
- vue 兄弟元件之間傳值之busVue元件
- 架構之爭,體制之惑(1)--產品經理模式之弊論架構模式
- 前端之資料模擬之Mock.js前端MockJS
- 軟體測試江湖之公會武器之爭
- Java常用資料結構之Set之TreeSetJava資料結構
- AI犯錯誰之過?切勿盲目相信之AI
- React之元件(component)之間的通訊React元件
- 計算機網路之HTTP之概況計算機網路HTTP
- 揭秘ORACLE備份之----RMAN之五(CATALOG)Oracle
- Android高階之十三講之安全方案Android
- QT之不同主機之間TCP通訊QTTCP
- 【Zookeeper】原始碼分析之持久化(二)之FileSnap原始碼持久化
- AMD and CMD are dead之KMD.js之懶JS
- 程式設計之美之買票找零程式設計
- Java物件之間的比較之equals和==Java物件
- 前端之HTML前端HTML
- Java 之 JDBCJavaJDBC
- css之定位CSS
- jQuery之documentFragmentjQueryFragment
- react之schedulerReact
- html之iframe,aHTML