作为一个了解Cocoa / Cocoa Touch的API的小项目,我一直在研究一个小型浏览器。我设法得到一个简单的设计,其中有后退/前进/重新加载按钮,地址栏本身和连接按钮(我必须弄清楚如何修改键盘以获得“Go”按钮代替常规回报。
我目前的问题是我的通用连接按钮的功能如下所示:
-(IBAction)connect:(id)sender
{
NSURL *url = [NSURL URLWithString:address.text]; //address is the address bar
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
[webView loadRequest:request];
[address resignFirstResponder]; //kill the address entry keyboard
}
但是,出于某种原因,只有在URL前面有“http://”时才会理解该URL。只需输入“google.com”并触摸“连接”按钮即可。我认为这是NSURL类或UIWebView的潜在问题,但API文档有时并不是特别有用,我根本无法弄清楚哪个。我觉得自动将“http://”添加到地址栏的文本属性的前面可能是一个不好的主意,以防需要“https://”(尽管另一方面,正常的网站经常会转发)一个安全的协议,但情况并非总是这样。)
我也遇到了后退和前进按钮的问题,因为他们没有更新地址字段的地址。这是可以理解的,因为地址栏没有直接绑定到WebView(也许有一部分UIWebView执行此操作,我还没有遇到过?),我还没有想出更新地址栏的方法显示新的URL。我注意到有一些UIWebViewDelegate方法,其中包括 webViewDidStartLoad 等内容,但我并不完全了解如何正确使用这些内容。我已经尝试使用 [webView isLoading] 布尔值作为测试,然后相应地修改地址栏URL,但它似乎没有用,可能是由于缓存或类似的东西。< / p>
如果我没有详细说明某些事情,或者这些问题已在这里得到解答,请原谅我;我做了一个快速搜索,并在网上浏览了一下,但却没有遇到任何有关该做什么的建议。正如我所说,Apple的API文档虽然非常深入,但有时使用起来有点尴尬。如果您对我的目标有任何疑问,我一定会尽力回答。
答案 0 :(得分:0)
NSURL
非常挑剔,对于任何无法解析为有效网址的内容,都会返回nil
:
来自NSURL URLWithString:
方法文档:
URLString
用于初始化NSURL对象的字符串。 必须是符合RFC 2396的网址。此方法根据RFC 1738和1808解析URLString。
以下是指向RFC 2396的链接。
要提取当前加载的地址,您可以使用UIWebViewDelegate webViewDidFinishLoading:
委托方法提取当前网址并更新文字字段:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
textField.text = webView.request.URL.absoluteString;
}