适用于iphone应用程序的“约”文本中的超链接

时间:2009-01-11 14:14:02

标签: iphone cocoa-touch

我正处于我的第一个简单的iPhone应用程序的最后阶段。我正在构建一个“约”视图,包含信用/信息/等。

我在最简单的事情上失败了:如何在文本中嵌入超链接?我目前正在使用带有UILabel的UIView作为文本。

我已经在这里查看了示例应用程序,但没有到达任何地方。我应该使用UIWebView吗?

THX。

5 个答案:

答案 0 :(得分:11)

是的,使用UIWebView并在其中放入静态HTML。

像这样:

[myWebView loadHTMLString:@"<html><head></head><body style=\"font-family: sans-serif;\"> .... </body></html>" baseURL:nil];

答案 1 :(得分:6)

要在指定的网址

启动网络浏览器
NSURL *target = [[NSURL alloc] initWithString:@"http://www.stackoverflow.com"];
[[UIApplication sharedApplication] openURL:target];

此代码可以在任何地方运行。我对UILabel进行了分类,添加了touchsEnded方法并将其放在那里。 (别忘了设置labelname.userInteractionEnabled = YES;)

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    NSURL *target = [[NSURL alloc] initWithString:@"http://www.stackoverflow.com"];
    [[UIApplication sharedApplication] openURL:target];
}

答案 2 :(得分:4)

您可以通过使用您希望显示的网址调用 UIApplication openURL:方法来触发Safari。 这将关闭您的应用程序,然后打开safari(或mail / youtube / etc)。

你会想要以某种方式建立你的链接,也许是在按钮中。那部分取决于你。

如果要将html内容嵌入到视图中,请务必使用UIWebView。

文档:

答案 3 :(得分:4)

UIWebView可能是错误的方法。对于像这样的事情来说,非常太过分了。您应该查看名为LRLinkableLabel的Github项目。

它会自动检测.text属性中的所有网址。

您可以像这样使用它:

LRLinkableLabel *label = [[LRLinkableLabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 20.0)];
label.delegate = self;
label.text = @"Check out http://dundermifflin.com to find some great paper deals!";

然后确保self实现此方法:

- (void) linkableLabel:(LRLinkableLabel *)label clickedButton:(UIButton *)button forURL:(NSURL *)url {
    [[UIApplication sharedApplication] openURL:url];
}

您还可以使用linkColortextColor属性配置标签的外观。从这一点开始,您可以像使用任何其他UILabel一样使用它。

请务必在完成所有工作后将delegate设置为nil,以确保所有内容都已清理完毕。

希望这有帮助。

答案 4 :(得分:1)

谢谢Frank和Ryan。

除了Frank的方向,我还需要实现UIWebViewDelegate,并在Interface Builder中链接到它。原因是点击的每个链接都会在我的应用程序中打开(无法导航......)。我只需要实现这个方法,用适当的应用程序打开每个URL:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:request.URL];
        return false;
    }
    return true;
}