制作属性标签可点击的Objective-C ios的特定部分

时间:2017-05-16 10:04:46

标签: ios objective-c

您能告诉我如何使得带下划线的文本的每个部分都可以点击。我有条款和政策的要求,如果用户点击条款,则会调用某些API,而当点击政策时,会调用其他一些API。我尝试设置一个透明按钮,但设置约束时,它有些不适合所有屏幕尺寸,如5s,Plus尺寸和iPAD。请提出一些建议来解决这个问题。

3 个答案:

答案 0 :(得分:1)

不要使用按钮,因为这是一种可怕的方法。请尝试以下代码。我假设你熟悉为字符串添加属性。

NSString *info = @"You long text with Terms and Policy keyword in it";
NSRange termsRange = [info rangeOfString:@"Terms"];    
NSRange policyRange = [info rangeOfString:@"Policy"];

NSMutableAttributedString *infoString = [[NSMutableAttributedString alloc] initWithString:info];
[infoString addAttribute: NSLinkAttributeName value: @"http://www.yourTermsApi.com" range: termsRange];    
[infoString addAttribute: NSLinkAttributeName value: @"http://www.yourPolicyApi.com" range: policyRange];

self.label.atributedText = infoString

您可能已经想到它会将关键字属性添加到关键字TermsPolicy。因此,当您点击时,将调用相关的api。如果您想使用上述范围,请添加不同的颜色,以使视觉看起来更具吸引力。

答案 1 :(得分:0)

你可以使用点按手势和所有

来制作这样的标签
 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;查找被点击的文本部分。

我自己没试过最后一部分。希望它有所帮助。

答案 2 :(得分:-1)

您应该使用UITextView并将其设置为链接重新协调。有一种有趣的方法叫做:

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange

在我的叹息中,这将是最简洁的方式。