отклонение uiwebview - PullRequest
       4

отклонение uiwebview

1 голос
/ 18 июня 2010

Хорошо, я действительно потратил 2 дня на это, и это поставило меня в тупик.

Из моего основного UIViewController я назвал WebViewController, который является UIViewController с UIWebView внутри:

UOLCategoriesWebViewController *ucwvcontroller = [[UOLCategoriesWebViewController alloc] initWithNibName:@"UOLCategoriesWebViewController" bundle:nil];

    [self presentModalViewController:ucwvcontroller animated:YES];
    [ucwvcontroller release];

Внутри UOLCategoriesWebViewController я вызвал метод делегата shouldStartLoadWithRequest, где, когда пользователь нажимает на ссылку определенного типа, он анализирует параметры и возвращается к основному UIViewController (или, по крайней мере, это то, что я хочу, чтобы он делал) ):

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
    BOOL continueOrExit = YES;
    NSURL *url = request.URL;
    NSString *urlString = [url relativeString];
    NSString *urlParams = [url query];
    NSArray *urlParamArr = [urlParams componentsSeparatedByString:@"&"];
    NSLog(@"the url is: %@",urlString);
    //NSLog(@"the params are: %@,%@",[urlParamArr objectAtIndex:0],[urlParamArr objectAtIndex:1]);

    //BOOL endTrain1 = [[urlParamArr objectAtIndex:1] hasPrefix:@"subCatValue"];
    //BOOL endTrain2 = ([urlParamArr objectAtIndex:1
    //NSLog(@"Number of elements: %@",[urlParamArr count]);
    if (navigationType == UIWebViewNavigationTypeLinkClicked)
    {
        //NSLog(@"Enter into His glory");

        if ([urlString hasSuffix:@"categories_list.php"]) {

            //NSLog(@"2nd Heaven");
            continueOrExit = YES;

        }else if ([[urlParamArr objectAtIndex:1] hasPrefix:@"subCatValue"]) {
            continueOrExit = NO;
            NSLog(@"end of the train");
            NSArray *firstParamStringArr = [[urlParamArr objectAtIndex:0] componentsSeparatedByString:@"="];
            NSArray *secondParamStringArr = [[urlParamArr objectAtIndex:1] componentsSeparatedByString:@"="];
            NSString *catSelected = [firstParamStringArr objectAtIndex:1];
            NSString *subCatSelected = [secondParamStringArr objectAtIndex:1];



            //go back to native app
            [self goBackToMain:catSelected andSubCat:subCatSelected];



        }
    }
    return continueOrExit;
}

На самом деле в вышеупомянутой функции, где я вызываю метод goBackToMain, я хочу, чтобы он вызвал метод делегата и вернулся к mainviewcontroller. К сожалению, после выполнения этого метода goBackToMain он возвращается к этому методу и продолжает возвращать continueOrExit.

Есть ли способ заставить его действительно выйти, ничего не возвращая? Я пытался вставить несколько возвратов безрезультатно. Или я могу на html-странице передать некоторый javascript для прямого вызова этого метода, чтобы мне не пришлось проходить через этот метод делегата?

Заранее спасибо за помощь!

1 Ответ

1 голос
/ 18 июня 2010

Можно попробовать отложить вызов goBackToMain:andSubCat: после выполнения метода делегата.Таким образом, метод делегата может вернуться, и затем вызов будет обработан:

NSArray *firstParamStringArr = [[urlParamArr objectAtIndex:0] componentsSeparatedByString:@"="];
NSArray *secondParamStringArr = [[urlParamArr objectAtIndex:1] componentsSeparatedByString:@"="];
NSString *catSelected = [firstParamStringArr objectAtIndex:1];
NSString *subCatSelected = [secondParamStringArr objectAtIndex:1];

NSMethodSignature *sig = [self methodSignatureForSelector:@selector(goBackToMain:andSubCat:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig];
[inv retainArguments];
[inv setTarget:self];
[inv setSelector:selector];
[inv setArgument:&catSelected atIndex:2];
[inv setArgument:&subCatSelected atIndex:3];
[inv performSelector:@selector(invoke) withObject:nil afterDelay:0.0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...