0

2つ以上の単語を検索しようとする場合を除いて、すべてがうまく機能しているようです。したがって、「apple」は検索としてgoogleに送信されますが、「applestuff」はロードに失敗します。何か案は?また、didfailtoloadにグーグル検索を追加しましたが、didfailtoloadのループが返されました。

-(BOOL)textFieldShouldReturn:(UITextField *)textField {

    webView.delegate = self;

    if ([urlField.text hasPrefix:@"http://"]) {

        [webView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString:urlField.text]]];
        [urlField resignFirstResponder];
        return NO;

    } else if ([self isProbablyURL:urlField.text]) {

    NSString *query = [urlField.text stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    NSURL *urlQuery = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", query]];
    NSURLRequest *request = [NSURLRequest requestWithURL:urlQuery];
    [webView loadRequest:request]; 
    [urlField resignFirstResponder];
    return NO;

    } else {

        ([self performGoogleSearchWithText:urlField.text]);
        [urlField resignFirstResponder];
        return YES;

    }
}


- (void)performGoogleSearchWithText:(NSString *)text {

    // Make a google request from text and mark it as not being "fallbackable" on a google search as it is already a Google Search
    NSString *query = urlField.text;
    NSURL *urlQuery = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.com/search?hl=en&site=&source=hp&q=%@", query]];
    NSURLRequest *request = [NSURLRequest requestWithURL:urlQuery];
    [webView loadRequest:request];

}


- (BOOL)isProbablyURL:(NSString *)text {

     // do something smart and return YES or NO
    NSString *urlRegEx =
    @"((\\w)*|(m.)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|(m.)*|([0-9]*)|([-|_])*))+";
    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
    return [urlTest evaluateWithObject:urlField.text];
    //return NO;

}
4

1 に答える 1

0

ここでは-performGoogleSearchWithText:、ユーザーが指定した検索文字列を使用してGoogleURLを作成しています。ただし、クエリに複数の単語が含まれている場合、単語間に空白があり、NSURLは無効な文字が含まれているため、URLの作成を拒否します。これが機能するためには、空白文字をパーセントエスケープされた同等の文字(%20など)に置き換える必要があります。

次のバージョンの-performGoogleSearchWithText:メソッドでは、NSStrings+stringByAddingPercentEscapesUsingEncoding:メソッドを使用して、URLで無効な検索文字列内の文字を、URLパーセントエンコードされた同等の文字に置き換えました。

- (void)performGoogleSearchWithText:(NSString *)text {
    // Make a google request from text and mark it as not being "fallbackable" on a google search as it is already a Google Search
    NSString *query = [text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *urlQuery = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.com/search?hl=en&site=&source=hp&q=%@", query]];
    NSURLRequest *request = [NSURLRequest requestWithURL:urlQuery];
    [webView loadRequest:request];
}

注:を使用してユーザーインターフェイスから直接ユーザークエリを取得するのではなく、渡されたテキストパラメータを使用しurlField.textました。

于 2012-04-08T14:18:33.340 に答える