Question

Ok, I'm still pretty new to iOS development, so I apologize if this is a silly question.

But, I have an AlertView that I call from the AppDelegate then respond when clicking a button in the alert. I can do a NSLog and see that the methods are getting called. But, it's not pushing the view into the stack. Here's a sample of what I have (I'm sure it's wrong):

This is in the AppDelegate.m:

#import "AppDelegate.h"
#import "ProfileConnection.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize navController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.    
return YES;
}

-(void)switchToController:(NSString *)controller animated:(BOOL)animated{

NSLog(@"switching to controller %@", controller);

// maybe we can do a check to see if a subview exists...and then push or pop accordingly.

// switch to the "TableView" view
if( [controller isEqualToString:@"ProfileConnection"]){
    NSLog(@"switching to the ProfileConnection view");

    ProfileConnection *profile = [[ProfileConnection alloc] initWithNibName:@"ProfileConnection" bundle:nil];
    [self.navController pushViewController:profile animated:YES];

}
}

-(void)showConnectionFoundAlert
{
NSString *connectFoundMsg = [[NSString alloc] initWithFormat:@"We found someone we'd think you would like to meet:  Tony Davis"];
UIAlertView *connectionFoundAlert = [[UIAlertView alloc] initWithTitle:@"Connection Found" message:connectFoundMsg delegate:self cancelButtonTitle:@"Decline" otherButtonTitles:@"Connect", @"View Profile", @"Save For Later", nil];
[connectionFoundAlert show];
//[connectionFoundAlert release];

}

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
NSString *alertString = [[NSString alloc] initWithFormat:@""];

if([title isEqualToString:@"Decline"])
{
    alertString = @"Declied";
}
else if([title isEqualToString:@"Connect"])
{
    alertString = @"Connected";
}
else if([title isEqualToString:@"View Profile"])
{
    //alertString = @"Profile Viewed";
    //NSLog(@"View Profile is being called");

    [self switchToController:@"ProfileConnection" animated:YES];

    //UIViewController *profile = [[UIViewController alloc] initWithNibName:@"ProfileConnection" bundle:nil];
    //ProfileConnection *profile = [[ProfileConnection alloc] initWithNibName:@"ProfileConnection" bundle:[NSBundle mainBundle]];
    //UINavigationController *nav = [[UINavigationController alloc] init];
    //[nav pushViewController:profile animated:NO];


    /*UIViewController *profile = [[UIViewController alloc] initWithNibName:@"ProfileConnection" bundle:nil];
    UINavigationController *navigation = [[UINavigationController alloc] init];
    [navigation pushViewController:profile animated:YES];*/

    /*
    ProfileConnection *profile = [ProfileConnection alloc];
    //UIView *current = self.window;
    [self.window addSubview:profile.view];
    */
    /*
    [window addSubview:view1.view];
    [window makeKeyAndVisible];

    - (void)goToNextPage {
        view2 = [ViewController2 alloc];   
        UIView *current = self.window;
        [self.window addSubview:view2.view];
    */

}
else if ([title isEqualToString:@"Save For Later"])
{
    alertString = @"Saved It";
}

UIAlertView *alertStr = [[UIAlertView alloc] initWithTitle:@"" message:alertString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

if ([alertString isEqualToString:@""]) {

} else {
    [alertStr show];        
}
}

@end

This is the AppDelegate.h:

#import <UIKit/UIKit.h>
#import "ProfileConnection.h"

@interface AppDelegate : UIResponder <UIAlertViewDelegate, UIApplicationDelegate, UINavigationControllerDelegate> {
UINavigationController *navController;
}

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, retain) UINavigationController *navController;

-(void)showConnectionFoundAlert;
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;
-(void)switchToController:(NSString *)controller animated:(BOOL)animated;

@end

I am able to add the view with this, but I lose my navigation controller:

ProfileConnection *profile = [ProfileConnection alloc];
[self.window addSubview:profile.view];

You can see I have tried a few approaches, but I'm confusing myself trying to use the storyboard approach.

Also, the ProfileConnection view is blank with a single label at the moment, if that helps.

Was it helpful?

Solution

You code looks ok [self.navController pushViewController:profile animated:YES]; is how you should do it.

You should make sure that you have added the navigation controller to the window. Perhaps this should already be done by the storyboard, but if not user the rootviewcontroller property of the window (its better than addSubview).

self.window.rootViewContorller = self.navController;

Now do a sanity check to make sure nothing is nil (profile or the navController).

NSLog(@"%@ %@",self.navController, profile);

Does any of that help?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top