我正处于我的第一个简单的iPhone应用程序的最后阶段。我正在构建一个“约”视图,包含信用/信息/等。
我在最简单的事情上失败了:如何在文本中嵌入超链接?我目前正在使用带有UILabel的UIView作为文本。
我已经看过这里和示例应用程序,但没有到达任何地方。我应该使用UIWebView吗?
谢谢。
是的,使用UIWebView并在其中放置静态HTML。
像这样:
[myWebView loadHTMLString:@"<html><head></head><body style=\"font-family: sans-serif;\"> .... </body></html>" baseURL:nil];
要在指定的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];
}
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];
}
您还可以使用linkColor
和textColor
属性来配置标签的外观。从这一点开始,您可以像使用任何其他UILabel一样使用它。
记得将delegate
设置为nil
,以确保一切都清理干净。
希望这可以帮助。
您可以通过使用您希望显示的URL调用UIApplication openURL:方法来触发safari。这将关闭您的应用程序,然后打开safari(或mail / youtube / etc)。
你会想要以某种方式建立你的链接,也许是在按钮中。那部分取决于你。
如果要将html内容嵌入到视图中,请务必使用UIWebView。
文档:
谢谢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;
}