0
点赞
收藏
分享

微信扫一扫

ios 一段文字,指定固定的字符为蓝色,再带个点击事件

效果如下图:

ios 一段文字,指定固定的字符为蓝色,再带个点击事件_验证码

在 Objective-C 中创建一个含有特定文本样式和点击事件的 UILabel 直接做不到,因为 UILabel 不支持点击事件。但你可以使用 UITextView 来实现类似的效果,因为它支持富文本(NSAttributedString)和链接。以下是如何实现的步骤:

  1. 创建一个 UITextView,配置它以显示富文本并处理点击事件。
  2. 使用 NSAttributedString 来设置文本样式,将“重发验证码”部分设置为蓝色,并且使其看起来像是可点击的链接。
  3. 为了响应点击事件,你需要设置一个 URL scheme 并在 UITextView 的 delegate 方法中处理点击事件。

以下是一个具体的实现示例:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextViewDelegate>
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 创建 UITextView
    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 100, self.view.bounds.size.width - 40, 200)];
    textView.delegate = self;
    textView.editable = NO; // 设置为不可编辑
    textView.dataDetectorTypes = UIDataDetectorTypeAll; // 用于自动检测链接、地址等
    textView.backgroundColor = [UIColor clearColor]; // 设置背景色透明
    
    // 创建 NSAttributedString
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"收不到验证码?请先确认手机是否安装了短信拦截软件或是否欠费停机,若均不是,请再尝试重发验证码"];
    
    // 设置 "重发验证码" 部分的样式
    [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:[attributedString.string rangeOfString:@"重发验证码"]];
    [attributedString addAttribute:NSLinkAttributeName value:@"resend://" range:[attributedString.string rangeOfString:@"重发验证码"]]; // 添加一个自定义的 URL scheme 作为链接
    
    textView.attributedText = attributedString;
    
    [self.view addSubview:textView];
}

// 处理点击事件
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction {
    if ([[URL scheme] isEqualToString:@"resend"]) {
        NSLog(@"重发验证码被点击");
        // 在这里添加重发验证码的代码
        return NO; // 返回 NO 表示我们已经处理了点击事件
    }
    return YES; // 对于非自定义 scheme,返回 YES 以允许系统处理
}

@end

在这个例子中,我们首先设置了 UITextView 并禁止了编辑,然后创建了一个 NSMutableAttributedString 来设置整个文本和 "重发验证码" 部分的样式。我们给 "重发验证码" 部分添加了蓝色的前景色和一个自定义的 URL scheme(resend://),最后我们通过实现 UITextViewDelegate 中的 -textView:shouldInteractWithURL:inRange:interaction: 方法来响应点击事件。

请注意,你需要在你的 ViewController 文件中添加这段代码,并确保你的 ViewController 遵守 UITextViewDelegate 协议。这个实现方式相对简单,并且能够很好地在 iOS 应用中展示富文本内容和处理点击事件。

举报

相关推荐

0 条评论