我有一个UILabel,它的文本是从服务器获取的.其中一些文本将被标识为链接,在touch 这些链接时应该执行一些操作.例如:

NSString*str=@"我的电话号码是645-345-2345,地址是xyz";

这是UILabel的完整文本.我只有一个UILabel用于显示此文本(文本是动态的.我只是举了一个例子.).点击这些链接,我需要执行一些操作,比如导航到不同的屏幕或打电话

[label1 addCustomLink:[NSURL URLWithString:@"http://www.foodreporter.net"] inRange:[txt rangeOfString:someString]];  

但我想知道如何才能让这text links人执行一些操作,比如导航到不同的屏幕或打电话.
如果需要更多的解释,请告诉我.

推荐答案

您可以使用稍后截取的fake URL scheme将自定义操作添加到支持链接的任何UILabel个可用替换项中:

TTTAttributedLabel *tttLabel = <# create the label here #>;
NSString *labelText = @"Lost? Learn more.";
tttLabel.text = labelText;
NSRange r = [labelText rangeOfString:@"Learn more"]; 
[tttLabel addLinkToURL:[NSURL URLWithString:@"action://show-help"] withRange:r];

然后,在你的TTTAttributedLabelDelegate分中:

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url {
    if ([[url scheme] hasPrefix:@"action"]) {
        if ([[url host] hasPrefix:@"show-help"]) {
            /* load help screen */
        } else if ([[url host] hasPrefix:@"show-settings"]) {
            /* load settings screen */
        }
    } else {
        /* deal with http links here */
    }
}

TTTAttributedLabel是OHAttributedLabel的Forking .

如果你想要一种更复杂的方法,看看Nimbus Attributed Label.它支持开箱即用定制链接.

Ios相关问答推荐

SwiftUI拖动手势和内容拖动时的奇怪行为( skip /卡顿)

preferredCompactColumn作为NavigationSplitViewColumn.sidebar传递,但仍能在iOS上看到详细信息页面

验证开发人员应用程序证书是否已在您的设备上验证

SWIFT AVFoundation翻转相机功能不起作用

如何使用参与者允许并行读取,但阻止对SWIFT中资源的并发读取和写入?

在将Cocoapods更新到1.13.0之后,它抛出错误

当目标位于菜单标签内时,matchedGeometryEffect 的行为很奇怪

如何在用户点击的位置使用SceneKit渲染球体?

ionic 4 - 编译 ios - 来自项目Pods的目标GoogleDataTransport中的问题

Flutter Aging Person 自定义小部件

在 Swift 中从 Objective C 集合调用块

如何在swiftui中更改可搜索的搜索图标 colored颜色

如何从 scendelegate 打开我的标签栏控制器

有什么方法可以预填充核心数据?

快速禁用 UITextfield 的用户输入

Xcode 8:函数类型不能有参数标签 destruct 我的构建

将自定义对象保存到 NSUserDefaults

AVAudioRecorder 抛出错误

闭包不能隐式捕获变异的 self 参数

将视图控制器从一个情节提要移动或复制到另一个情节提要