Хорошо, я действительно потратил 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 для прямого вызова этого метода, чтобы мне не пришлось проходить через этот метод делегата?
Заранее спасибо за помощь!