views:

274

answers:

2

HEllo,

I have a hybrid iPhone application that has a UITabBarController and 5 Tabs. Each tab hosts a UINavigationViewController initialized with a root controller that is a UIViewController hosting one UIWebView. On a certain specific link, I push a UITableViewController inherent on the navigation Controller (which shows some data stored locally) and has a back button. Following is the code after i parse the URL string in shouldStartLoadWithRequest: method.

    UINavigationController *navControl = (UINavigationController *)self.parentViewController;
    CartTableViewController *tabView = [[CartTableViewController alloc] init];
    [navControl pushViewController:tabView animated:YES];
    navControl.navigationBar.hidden = NO;
    return YES;

This works fine. The specific link is parsed and the table view is pushed onto the navigationStack. When i click the back button though (and yes it shows 'back' rather than previous view's name which is, say 'news') i get another table view but this time the back button is named 'news'. and when i click on that, i go back to my rootcontroller. I don't seem to find from where are two views pushed onto the stack over root view.

Thanks. Zaki

A: 

Your implementation of webView:shouldStartLoadWithRequest:navigationType is probably being called twice. One solution would be to only create and push an instance of CartTableViewController if an instance isn't already on the UINavigationController stack.

if (![navControl.topViewController isKindOfClass:[CartTableViewController class]]) {
    CartTableViewController *tabView = [[[CartTableViewController alloc] init] autorelease];
    [navControl pushViewController:tabView animated:YES];
    navControl.navigationBar.hidden = NO;
}

You should also be releasing your tabView instance too.

Chris Gummer
A: 

Okay i found the issue. I need to return NO from shouldStartLoadWithRequest: for such a thing. Sorry for the bother

Zaki