2010-06-18 4 views
1

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

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

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

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

Внутри UOLCategoriesWebViewController я называю метод shouldStartLoadWithRequest делегата, где, когда пользователь нажимает на конкретном типе связи он разбирает вне Params и вернуться к главному 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, чтобы напрямую вызвать этот метод, чтобы мне не пришлось проходить через этот метод делегата?

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

+0

У меня возникли проблемы с пониманием того, что именно вы делаете. если суффикс url - category_list.php, который вы хотите загрузить, и если вы не хотите что-то делать, а затем уволите? – Rudiger

+0

Да, это точно правильно :) – chimgrrl

+0

что вы имеете в виду при выходе, не возвращая ничего ... Я не получаю вашу точную цель ... –

ответ

1

Что вы можете попробовать - отложить вызов 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]; 
+0

спасибо! это дало мне хорошее начало в правильном направлении :) – chimgrrl

Смежные вопросы