使属性标签的特定部分可单击Objective-C ios
你能告诉我如何让下划线文本的每一部分都可以点击吗?我有一个条款和政策的要求,如果用户点击条款,会调用一些API,当用户点击政策时,会调用一些其他API。在故事板中,我试着设置一个透明按钮,但在设置约束条件时,它并不适合所有屏幕尺寸如5s,再加上尺寸和iPAD。请给出一些解决这个问题的建议。你可以有这样一个标签,上面有点击手势和所有提示使属性标签的特定部分可单击Objective-C ios,ios,objective-c,Ios,Objective C,你能告诉我如何让下划线文本的每一部分都可以点击吗?我有一个条款和政策的要求,如果用户点击条款,会调用一些API,当用户点击政策时,会调用一些其他API。在故事板中,我试着设置一个透明按钮,但在设置约束条件时,它并不适合所有屏幕尺寸如5s,再加上尺寸和iPAD。请给出一些解决这个问题的建议。你可以有这样一个标签,上面有点击手势和所有提示 UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(80, 160, 200, 24)]; [lb
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(80, 160, 200, 24)];
[lbl setText:@"Terms and conditions"];
[lbl setUserInteractionEnabled:YES];
[self.view addSubview:lbl];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tncLabel:)];
[lbl addGestureRecognizer:tap];
}
并在标签中找到触摸位置
-(void) tncLabel:(UITapGestureRecognizer *) sender
{
CGPoint pt = [sender locationInView:lbl];
NSLog(@"Tap point x: %f", pt.x);
}
以后可以使用-(CGRect)rectForSubstringWithRange:(NSRange)range
查找文本的哪一部分被点击
我自己还没试过最后一部分。希望有帮助。你可以有一个这样的标签,上面有点击手势等等
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(80, 160, 200, 24)];
[lbl setText:@"Terms and conditions"];
[lbl setUserInteractionEnabled:YES];
[self.view addSubview:lbl];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tncLabel:)];
[lbl addGestureRecognizer:tap];
}
并在标签中找到触摸位置
-(void) tncLabel:(UITapGestureRecognizer *) sender
{
CGPoint pt = [sender locationInView:lbl];
NSLog(@"Tap point x: %f", pt.x);
}
以后可以使用-(CGRect)rectForSubstringWithRange:(NSRange)range
查找文本的哪一部分被点击
我自己还没试过最后一部分。希望有帮助。您应该使用
UITextView
并为链接设置此选项。有一个有趣的方法调用:
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
您应该使用
UITextView
并设置此链接。有一个有趣的方法调用:
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
不要使用按钮,因为这是一种可怕的方法。请尝试下面的代码。我假设您熟悉向字符串添加属性
NSString *mLongText = @"You long text with Terms and Policy keyword in it";
NSRange termsRange = [mLongText rangeOfString:@"Terms"];
NSRange policyRange = [mLongText rangeOfString:@"Policy"];
NSMutableAttributedString *infoString = [[NSMutableAttributedString alloc] initWithString:mLongText];
[infoString addAttribute: NSLinkAttributeName value: @"http://www.yourTermsApi.com" range: termsRange];
[infoString addAttribute: NSLinkAttributeName value: @"http://www.yourPolicyApi.com" range: policyRange];
self.label.attributedText = infoString
正如您可能已经了解到的那样,它会将link属性添加到关键字
术语
和策略
。因此,当您点击时,将调用关联的api。如果您想使用上述范围使阁楼看起来更具视觉吸引力,请添加不同的颜色。不要使用按钮,因为这是一种可怕的方法。请尝试下面的代码。我假设您熟悉向字符串添加属性
NSString *mLongText = @"You long text with Terms and Policy keyword in it";
NSRange termsRange = [mLongText rangeOfString:@"Terms"];
NSRange policyRange = [mLongText rangeOfString:@"Policy"];
NSMutableAttributedString *infoString = [[NSMutableAttributedString alloc] initWithString:mLongText];
[infoString addAttribute: NSLinkAttributeName value: @"http://www.yourTermsApi.com" range: termsRange];
[infoString addAttribute: NSLinkAttributeName value: @"http://www.yourPolicyApi.com" range: policyRange];
self.label.attributedText = infoString
正如您可能已经了解到的那样,它会将link属性添加到关键字
术语
和策略
。因此,当您点击时,将调用关联的api。如果您想使用上述范围使阁楼看起来更具视觉吸引力,请添加不同的颜色。使用按钮是正确的方法。我不确定两个链接是否可行,因为手势识别器作为一个整体添加到标签中,属性文本只是另一个属性。在任何情况下,请让我们知道您为您的问题找到了什么解决方案。也许您可以使用WebView和链接,这对我来说似乎是最简单的方法。一种方法是您可以让两个标签彼此靠近(相应地调整约束),并向标签添加点击手势。使用UITextView
的示例:使用按钮是正确的方法。我不确定两个链接是否可行,因为手势识别器作为一个整体添加到标签中,属性文本只是另一个属性。在任何情况下,请让我们知道您为您的问题找到了什么解决方案。也许您可以使用WebView和链接,这对我来说似乎是最简单的方法。一种方法是您可以让两个标签彼此靠近(相应地调整约束),并向标签添加点击手势。使用UITextView
的示例: