我陷入了无法进行申请的地步。我有一些来自服务器的文本。它可以是单行或多行文本。我必须在UILabel上显示文字,对我来说没问题 问题是,我必须在查找相同文本的特定子字符串时显示UIButton。例如,文字是 Nitish \ n435-234-6543 \ nIndia ,显示如下:
Nitish
435-234-6543
India
所以,当我找到 435-234-6543 时,我必须在 435-234-6543 上显示UIButton。
重要:
1.文本是动态的 - 来自服务器。以上只是一个例子
2. UIButton将是UILabel的子视图。
我尝试了不同的方式,例如 OHAttributedLabel ,rectForLetterAtIndex和this。但没有成功。
我的想法是,在找到子串时创建按钮,并根据子串的 NSRange 设置按钮的框架。
这有可能吗?怎么做到呢?或者还有其他方法可以做到这一点吗?
发布代码对我来说不是问题。但我想这是我担心的方法。
如果需要进一步澄清,请告诉我
谢谢,
尼蒂什
答案 0 :(得分:0)
1)简易解决方案:
将您的UILabel
设为UITextView,并使用属性dataDetectorTypes
自动将电话号码作为链接。
2)更多涉及的解决方案:
有一种方便的方法可以确定需要绘制任何文本的大小:
CGSize size = [label.text sizeWithFont:label.font
constrainedToSize:CGSizeMake(label.frame.size.width, CGFLOAT_MAX)
lineBreakMode:UILineBreakModeWordWrap];
现在,您可以通过将字符串拆分为以下行来确定哪个字段是电话号码:
NSArray *comp = [label.text componentsSeparatedByString:@"\n"];
然后检查哪一个是数字。现在,您必须从height
变量的size
计算确切的帧,可能是这样的:
CGFloat positionOfNumber; // the index of your line in comp cast to CGFloat
CGFloat buffer = 10; // fiddle with this
CGFloat buttonHeight = (size.height- 2*buffer)/[comp length];
CGFloat buttonY = buffer + positionOfNumber * buttonHeight;
CGRect buttonFrame = CGRectMake(0, buttonY, label.frame.size.width, buttonHeight);
答案 1 :(得分:0)
- >我试图计算位置,但没有取得成功。似乎有很多工作来计算位置。一个直接的解决方案让我想到你为什么不拿一个或两个标签和一个按钮。
假设。你从webservice获得的动态字符串是:“Nitesh-56789-Test”。
在这里,您必须使用sizeWithFont方法计算所有标签的框架和使用动态高度宽度计算的按钮。
答案 2 :(得分:0)
对于那些想要完美解决方案的人来说,solution关于如何获得子串的CGRect。