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

问题描述 投票:8回答:5

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

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

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

谢谢。

iphone cocoa-touch
5个回答
11
投票

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

像这样:

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

6
投票

要在指定的URL上启动Web浏览器:

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];
}

4
投票

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

它将自动检测.text属性中的任何URL。

您可以像这样使用它:

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
投票

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

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

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

文档:


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.