使属性标签的特定部分可单击Objective-C ios

使属性标签的特定部分可单击Objective-C ios,ios,objective-c,Ios,Objective C,你能告诉我如何让下划线文本的每一部分都可以点击吗?我有一个条款和政策的要求,如果用户点击条款,会调用一些API,当用户点击政策时,会调用一些其他API。在故事板中,我试着设置一个透明按钮,但在设置约束条件时,它并不适合所有屏幕尺寸如5s,再加上尺寸和iPAD。请给出一些解决这个问题的建议。你可以有这样一个标签,上面有点击手势和所有提示 UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(80, 160, 200, 24)]; [lb

你能告诉我如何让下划线文本的每一部分都可以点击吗?我有一个条款和政策的要求,如果用户点击条款,会调用一些API,当用户点击政策时,会调用一些其他API。在故事板中,我试着设置一个透明按钮,但在设置约束条件时,它并不适合所有屏幕尺寸如5s,再加上尺寸和iPAD。请给出一些解决这个问题的建议。

你可以有这样一个标签,上面有点击手势和所有提示

 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
的示例: