在我的应用程序中,当用户添加对象时,也可以为该对象添加链接,然后可以在webView中打开链接。
我试图保存一个没有http://前缀的链接,然后在webView中打开但无法打开它!
在webView开始加载之前,有没有一种方法可以检查保存的URL是否有http://前缀?如果没有,请问如何在URL中添加前缀?
谢谢!
答案 0 :(得分:42)
您可以在NSString上使用- (BOOL)hasPrefix:(NSString *)aString
方法查看包含您的URL的NSString是否以http://前缀开头,如果没有,则添加前缀。
NSString *myURLString = @"www.google.com";
NSURL *myURL;
if ([myURLString.lowercaseString hasPrefix:@"http://"]) {
myURL = [NSURL URLWithString:myURLString];
} else {
myURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@",myURLString]];
}
我目前离开了我的Mac,无法编译/测试此代码,但我相信上述内容应该可行。
答案 1 :(得分:15)
NSString * urlString = ...;
NSURL * url = [NSURL URLWithString:urlString];
if (![[url scheme] length])
{
url = [NSURL URLWithString:[@"http://" stringByAppendingString:urlString]];
}
答案 2 :(得分:4)
我在Swift中为String写了一个扩展,看看url字符串是否有http或https
extension String{
func isValidForUrl()->Bool{
if(self.hasPrefix("http") || self.hasPrefix("https")){
return true
}
return false
}
}
if(urlString.isValidForUrl())
{
//Do the thing here.
}
答案 3 :(得分:3)
我不确定是否有任何方法可以检查,但你在代码中检查它。
尝试使用
NSRange range = [urlString rangeOfString:@"http://"];
if (range.location != NSNotFound)
// Add http://
答案 4 :(得分:2)
最好在scheme
对象上使用URL
属性:
extension URL {
var isHTTPScheme: Bool {
return scheme?.contains("http") == true // or hasPrefix
}
}
使用示例:
let myURL = https://stackoverflow.com/a/48835119/1032372
if myURL.isHTTPScheme {
// handle, e.g. open in-app browser:
present(SFSafariViewController(url: url), animated: true)
} else if UIApplication.shared.canOpenURL(myURL) {
UIApplication.shared.openURL(myURL)
}
答案 5 :(得分:1)
如果您要检查“http://”,您可能需要不区分大小写的搜索:
// probably better to check for just http instead of http://
NSRange prefixRange =
[temp rangeOfString:@"http"
options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
if (prefixRange.location == NSNotFound)
虽然我认为网址方案检查是一个更好的答案,具体取决于您的具体情况,因为网址可以以http或https和其他前缀开头,具体取决于您的用例。
答案 6 :(得分:0)
首先,您应该为NSURL创建一个新类别:文件>新文件> Objective-C类别。您可以按类HTTPURLWithString调用类别,使其成为NSURL的类别,按next并将其添加到目标。然后在NSURL + HTTPURLFromString.m中实现以下消息(并在.h中声明消息)
@implementation NSURL (HTTPURLFromString)
+(NSURL *)HTTPURLFromString:(NSString *)string
{
NSString *searchString = @"http";
NSRange prefixRange = [string rangeOfString:searchString options:(NSCaseInsensitiveSearch | NSAnchoredSearch)];
if (prefixRange.length == 4) {
return [NSURL URLWithString:string];
}
return [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", string]];
}
@end
在WebView中打开链接只是
NSString *urlString = @"www.google.com";
NSURL *url = [NSURL HTTPURLFromString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView.mainFrame loadRequest:request];
答案 7 :(得分:0)
您可以使用scheme属性进行检查。例如......
if ([yourURL.scheme isEqualToString:@"http"] || [yourURL.scheme isEqualToString:@"https"]) {
...
}