2

ユーザーがGoogleに入力したいものを入力するテキストフィールドがあります。ユーザーが[テキストフィールド]で[完了]をクリックすると、Webビューを含む新しいビューに移動します。問題は、テキストフィールドに何かを入力すると、Webビューが真っ白になります(Webビューにロードされません)。

 #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
4

1 に答える 1

2

loadRequest問題は、ストーリーボード識別子が。のコントローラーを作成する前に、発行しようとしているように見えることです"WebView"

新しいモーダルビューを表示しようとしている場合はUIWebView、通常、検索対象の文字列のNSStringプロパティをWebビューに追加します。たとえば、次のようになります。ViewControllersearchField

-(IBAction)searchdone {

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

次にviewDidLoad、Webビューを備えたそのView Controllerの場合、プロパティloadRequestを使用してURLの構築を行います。searchField

したがって、ViewController.h宛先ビューコントローラには、だけでなく、新しいプロパティも@interface含まれる可能性があります。UIWebViewsearchField

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIWebView *webView;
@property (nonatomic, strong) NSString *searchField;

@end

また、@implementation.mファイルのは次のようになります。

- (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の名前です。これをプロジェクトに適したものに置き換える必要があります。IBOutletUIWebView

また、検索フィールドのURLエンコードを行ったことにも注意してください。このようにして、アンパサンド文字、引用符などを含むフィールドを検索できます。これを行う最も簡単な方法は、CFURLCreateStringByAddingPercentEscapes上記の方法です。

于 2013-01-19T20:54:48.327 に答える