我使用“自己注册”作为文字。我想把它作为链接。点击该链接即可打开Register.xib
。
如何获得此链接?
答案 0 :(得分:12)
卡里姆是对的。创建一个UIButton对象,将其类型设置为“自定义”,然后您可以给它一个标题。将操作连接到推送或显示您的注册视图控制器的方法,您将全部设置。
您可能希望向用户说明该文本是可点击的链接。将文本的颜色设置为蓝色。另一个完全独立的选项是使用NSAttributedString
(具有下划线属性)向用户指示文本是可点击的。这需要an Open Source replacement for UITextView(您可以从this related question了解更多信息。)
答案 1 :(得分:2)
我想从下面你会得到你想要的......
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSSet *allTouches = [event allTouches];
if ([allTouches count] == 1)
{
UITouch *touch = (UITouch *)[allTouches anyObject];
CGPoint touchPoint = [touch locationInView:self];
// Convert to coordinate system of current view
touchPoint.y -= self.bounds.size.height;
touchPoint.y *= -1;
CGPathRef statusPath = CTFrameGetPath(statusCTFrame);
NSString *touchedInterStr = nil;
if (CGPathContainsPoint(statusPath, NULL, touchPoint, FALSE))
{
touchedInterStr = [self getInteractiveStringInFrame:statusCTFrameatPosition:touchPoint];
}
else
{
return ;
}
}
}
答案 2 :(得分:2)
有一个值得一提的中间立场。将UIButton
与UIButtonTypeCustom
一起使用有一些缺点,即您对文本样式的控制有限(例如,您无法使其右对齐或左对齐,它将始终居中)。
使用NSAttributedString
可能过度,如果您不熟悉NSAttributedString
,CoreText等,则难以实施。
我使用的解决方案是UIControl
的简单子类,它允许比子类化UIButton
更多的自定义,并且比NSAttributedString
等更少麻烦。仅当整个字符串是“链接”时,UIControl
方法才适用。
您可以在UIControl
子类中执行类似的操作:
UILabel
子视图UILabel
,backgroundColor
,textColor
等配置textAlignment
,如果您希望背景显示为UILabel
图层,请更改setHighlighted:
图层Twitter在其iOS应用程序中的推文链接@property
方法以自定义触摸/跟踪时的外观更改.h
文件中添加{{1}}个设置器,以便拥有类可以设置状态答案 3 :(得分:0)
首先,构造属性字符串并保存交互式文本和文本本身的范围。
然后,使用CoreText Framework绘制属性字符串,保留CTFrameRef。
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, bounds);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
CFRelease(framesetter);
CTFrameDraw(frame, context);
//CFRelease(frame);
CGPathRelease(path);
最后,覆盖[view touchesEnded:(NSSet *)触及withEvent:(UIEvent *)事件],如下所示:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSSet *allTouches = [event allTouches];
if ([allTouches count] == 1) {
UITouch *touch = (UITouch *)[allTouches anyObject];
CGPoint touchPoint = [touch locationInView:self];
// Convert to coordinate system of current view
touchPoint.y -= self.bounds.size.height;
touchPoint.y *= -1;
CGPathRef statusPath = CTFrameGetPath(statusCTFrame);
NSString *touchedInterStr = nil;
if (CGPathContainsPoint(statusPath, NULL, touchPoint, FALSE)) {
touchedInterStr = [self getInteractiveStringInFrame:statusCTFrame atPosition:touchPoint];
} else {
return ;
}
}
}
- (NSString *)getInteractiveStringInFrame:(CTFrameRef)frame atPosition:(CGPoint)point
{
CGPathRef path = CTFrameGetPath(frame);
CGRect rect;
CGPathIsRect(path, &rect);
// Convert point into rect of current frame, to accurately perform hit testing on CTLine
CGPoint pointInsideRect = point;
pointInsideRect.x = point.x - rect.origin.x;
CFArrayRef lines = CTFrameGetLines(statusCTFrame);
CFIndex count = CFArrayGetCount(lines);
CGFloat curUpBound = rect.origin.y + rect.size.height;
CFIndex touchedIndex = -1;
for (CFIndex pos = 0; pos < count; pos++) {
CTLineRef curLine = CFArrayGetValueAtIndex(lines, pos);
CGFloat ascent, descent, leading;
CTLineGetTypographicBounds(curLine, &ascent, &descent, &leading);
CGFloat curHeight = ascent + descent + leading;
if (pointInsideRect.y >= curUpBound-curHeight && pointInsideRect.y <= curUpBound){
touchedIndex = CTLineGetStringIndexForPosition(curLine, pointInsideRect); // Hit testing
break;
}
curUpBound -= curHeight;
}
if (touchedIndex == -1)
return nil;
NSEnumerator *enumerator = [interactiveStrs objectEnumerator];
InteractiveString *curString;
while ((curString = (InteractiveString *)[enumerator nextObject])) {
if (NSLocationInRange(touchedIndex, curString.range)) {
return curString.content;
}
}
return nil;
}
您可以在touchesEnded中获得交互式文本,然后您可以执行任何操作,例如触发委托方法。
PS:这是老式的解决方案,我听说iOS5提供了类似于增强的UIWebView来实现这些要求,也许你可以查看apple sdk文档库。答案 4 :(得分:0)
按一个按钮并设置要设置为超链接文本的按钮的标题。您可以在iOS 7和iOS 8中选择默认和自定义按钮类型按钮,但对于iOS 7以下,您只能选择自定义按钮类型。您可以更改文本的颜色以突出显示UI的文本,然后添加要在该按钮单击上添加的任何操作。它会像魅力,祝你好运。
答案 5 :(得分:0)
看看TTTAttributedLabel。配置链接,电话等非常简单