根据产品需求,需要一段提示性的文字,文字中某几个文字增加超链接,如果是HTML自然很容易。但是用在Xcode中实现,一开始想的是使用UILabel,虽然能改变文字颜色,但是没有点击事件,即便添加手势,仍是整行的点击事件,对特殊几个文字不起作用。
所以采用UITextView方法实现效果。
代码部分:
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"您还没有中奖信息,赶快去参加活动"];
[attributedString addAttribute:NSLinkAttributeName
value:@"click://"
range:[[attributedString string] rangeOfString:@"参加活动"]];
_noDataView = [[UITextView alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(_noDataImgView.frame) + 30, SCREEN_WIDTH, 30)];
_noDataView.attributedText = attributedString;
_noDataView.linkTextAttributes = @{NSForegroundColorAttributeName: RGBColor(91, 165, 239),
NSUnderlineColorAttributeName: [UIColor lightGrayColor],
NSUnderlineStyleAttributeName: @(NSUnderlinePatternSolid)};
_noDataView.font = [UIFont systemFontOfSize:14];
_noDataView.textAlignment = NSTextAlignmentCenter;
_noDataView.textColor = RGBColor(147, 147, 147);
_noDataView.backgroundColor = clear_color;
_noDataView.delegate = self;
_noDataView.editable = NO; //必须禁止输入,否则点击将弹出输入键盘
_noDataView.scrollEnabled = NO;
[self.view addSubview:self.noDataView];
说明:_noDataView自然是全局变量了。
执行点击事件
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
if ([[URL scheme] isEqualToString:@"click"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"popToHome" object:nil];//跳转到个人中心
[self backHome];
return NO;
}
return YES;
}
因为是textView中文字点击,所以适合轻轻点击,长按,快速点击均没有任何作用,甚至还能选中文字。这一点比较纠结。目前暂时没有想到其他合适的方法,如果大家有更好的可以贴出来共同学习。
文字后面跟图片:
先直接上代码:
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"icon_addr1@2x"];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"请输入详细地址(可填写街道,小区,大厦)"];
[attributedString addAttribute:NSForegroundColorAttributeName value:RGBColor(163, 163, 163) range:NSMakeRange(0, 20)];
[attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14] range:NSMakeRange(0, 20)];
NSAttributedString *attachmentString = [NSAttributedString attributedStringWithAttachment:attachment];
[attributedString insertAttributedString:attachmentString atIndex:20];
label.attributedText = attributedString;
这样可以根据文字多少,高度等自动在后面添加图片了。range需要计算一下。