【问题标题】:How to load Web view in different View in iOS 6如何在 iOS 6 的不同视图中加载 Web 视图
【发布时间】:2013-01-19 20:22:22
【问题描述】:

我有一个文本字段,用户可以在其中输入任何他们想用 Google 搜索的内容。当用户在文本字段中单击完成时,它会转到带有 Web 视图的新视图。 ISSUE 是当我在文本字段中输入内容时,网络视图只是白色的(不会将其加载到网络视图中)。

 #import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *query = [self buildGoogleSearchParameter:self.searchField];
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.co/search?q=%@", query]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];


}

- (NSString *)buildGoogleSearchParameter:(NSString *)searchField
{
    NSArray *unencodedStrings = [searchField componentsSeparatedByString:@" "];
    NSMutableArray *encodedStrings = [NSMutableArray array];

    for (NSString *unencodedString in unencodedStrings)
        [encodedStrings addObject:[self urlEncode:unencodedString]];

    return [encodedStrings componentsJoinedByString:@"+"];
}

- (NSString *)urlEncode:(NSString *)unencodedString
{
    return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
                                                                     (CFStringRef)unencodedString,
                                                                     NULL,
                                                                     (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                                     kCFStringEncodingUTF8));
}


-(IBAction)searchdone {

    ViewController *web = [self.storyboard instantiateViewControllerWithIdentifier:@"WebView"];
    web.searchField = searchbar.text;
    [self presentModalViewController:web animated:YES];
}

@end

【问题讨论】:

    标签: ios xcode uiwebview webview


    【解决方案1】:

    问题在于,您似乎在创建情节提要标识符为 "WebView" 的控制器之前就尝试发出 loadRequest

    如果您试图呈现一个带有UIWebView 的新模式视图,通常,您会在您的网络视图ViewController 中为正在搜索的字符串添加一个NSString 属性,例如searchField,例如:

    -(IBAction)searchdone {
    
        ViewController *web = [self.storyboard instantiateViewControllerWithIdentifier:@"WebView"];
        web.searchField = searchbar.text;
        [self presentModalViewController:web animated:YES];
    }
    

    然后 viewDidLoad 用于带有 web 视图的视图控制器然后将使用 loadRequest 使用 searchField 属性构建 URL:

    因此,目标视图控制器的ViewController.h 可能有一个@interface,其中不仅包括UIWebView,还包括我们的新searchField 属性:

    @interface ViewController : UIViewController
    
    @property (weak, nonatomic) IBOutlet UIWebView *webView;
    @property (nonatomic, strong) NSString *searchField;
    
    @end
    

    .m 文件中的@implementation 可能是:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        NSString *query = [self buildGoogleSearchParameter:self.searchField];
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.co/search?q=%@", query]];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [self.webView loadRequest:request];
    }
    
    - (NSString *)buildGoogleSearchParameter:(NSString *)searchField
    {
        NSArray *unencodedStrings = [searchField componentsSeparatedByString:@" "];
        NSMutableArray *encodedStrings = [NSMutableArray array];
    
        for (NSString *unencodedString in unencodedStrings)
            [encodedStrings addObject:[self urlEncode:unencodedString]];
    
        return [encodedStrings componentsJoinedByString:@"+"];
    }
    
    - (NSString *)urlEncode:(NSString *)unencodedString
    {
        return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
                                                                         (CFStringRef)unencodedString,
                                                                         NULL,
                                                                         (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                                         kCFStringEncodingUTF8));
    }
    

    注意,webView 是我的 IBOutlet 的名称,我的 UIWebView。您应该将其替换为适合您项目的任何内容。

    还请注意,我对搜索字段进行了一些 url 编码。这样您就可以搜索带有 & 字符、引号等的字段。最简单的方法是您在上面看到的 CFURLCreateStringByAddingPercentEscapes

    【讨论】:

    • 你能把我的代码和你的代码结合起来吗(我想我做错了)?
    • 他们是个问题。当我在文本文件中输入任何内容时,它都会进入谷歌主页:(
    • 修复了我忘记在 mainstoryboard 中添加 searchbar.text 的问题 :)
    • @iProgrammed 我了解到,当您加载页面时,您的视图控制器正在推送到它自己的另一个实例。如果你愿意,你可以这样做,但这是不必要的,它会占用内存,并且你会失去一些内置的UIWebView 功能。您的搜索可以在现有的UIWebView 上执行另一个loadRequest(无需创建控制器的另一个实例)。当你想返回时,你可以使用UIWebView 方法goBack 并且你就在上一页。如果你这样做了,你也可以通过 goForward 自动返回到你从 goBack 开始的网页。
    • 没问题,我会“谷歌”它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2021-05-09
    • 1970-01-01
    相关资源
    最近更新 更多