我想知道是否可以将UIButton放在一段文本的精确坐标上。
例如,我的UILabel有这样的文字:
“没有帐户?登录”
在斜体内容中,我需要按一下按钮,触摸此按钮将触发一个操作,打开登录视图
非常重要的是要使这个功能很好,在没有做任何事情的情况下使用其他语言:)
由于
答案 0 :(得分:5)
我会回答我的回答,因为这对于遇到同样问题的其他开发人员会有所帮助。
1 :您需要实现UITextViewDelegate方法:
- (BOOL)textView:shouldInteractWithURL:inRange:
实现非常简单,基本上,您将比较NSURL中收到的链接。当我有许多链接时,我喜欢使用NSURL组件通过主机进行比较,例如:
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
{
NSString *urlScheme = URL.scheme;
NSString *host = URL.host;
if([urlScheme isEqualToString:@"myapp"])
{
if([host isEqualToString:@"/signin"])
[self.onSignRequest( self )];
}
return YES;
}
当用户触摸链接时,将调用此方法。
2 :创建两个NSString
个实例,一个用于字符串"Don't have an account?"
,另一个用于字符串"Sign Up"
NSString *labelText = @"Don't have an account? ";
NSString *linkedText = @"Sign Up";
3 :创建一个NSMutableAttributedString
实例,并将两个字符串合并:
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:[AttributedText attributedStringWithText:[NSString stringWithFormat:@"%@%@", labelText, linkedText]
font:[UIFOnt systemFontOfSize:14.f]
color:[UIColor blueColor]]];
4 :为之前创建的可变属性字符串创建链接文本的范围:
NSRange range = [[attributedString string] rangeOfString:linkedText];
5 :创建一个字符串
5 :为可变字符串添加新的NSLinkAttributeName
,其中包含在步骤 4
[attributedString addAttribute:NSLinkAttributeName value:URLStringLink range:range];
6 :使用attributedText
的{{1}}属性
UILabel
7 :设置标签的代表:
_label.attributedText = attributedText;
就是这样。我希望这对任何人都需要在_label.delegate = textViewDelegate;
干杯,
答案 1 :(得分:0)
最简单的方法是将它们分成两个不同的标签,并将按钮框设置为第二个标签的框架。更难的方法是创建字符串大小并手动创建按钮的CGRect。那种方法是这样的:
CGSize dontSize = [@"Dont have an account?" sizeWithFont:label.font];
CGSize signinSize = [@"Sign In" sizeWithFont:label.font];
//Originate to the whole label's frame
CGRect buttonFrame = label.frame;
buttonFrame.origin.x += dontSize.width;
buttonFrame.size.width = signinSize.width;
答案 2 :(得分:0)
我已经实现了类似的东西。您只需将Tap Gesture Recognizer添加到Interface Builder中的View Controller,然后将其与标签链接即可。
Tap手势识别器有一个IBAction方法,您可以将代码放入。点击手势识别器的区域将自动匹配标签。
您还可以在标签上使用属性文本,使其显示为链接(带颜色和下划线)。
答案 3 :(得分:0)
如果您只想触发斜体文字中的操作,则应在NSLinkAttributeName
之外另外添加NSFontAttributeName
。选择您想要的任何链接,例如myapp://action1
。
然后使用UITextView
代替UILabel
并将您的班级指定为委托并实施
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL
inRange:(NSRange)characterRange
在那里做你想做的任何动作并返回NO,这将阻止Safari开始。
答案 4 :(得分:-1)
[button setFrame:signinLabel.frame]; [button setCenter:signinLabel.center];
或强>
或强>