UINavigationController pushViewController в viewDidLoad не работает - PullRequest
1 голос
/ 30 июля 2011

У меня есть следующий код в моем AppDelegate:

#import <UIKit/UIKit.h>

@class PersonalDiarySystemViewController;

@interface PersonalDiarySystemAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    PersonalDiarySystemViewController *viewController;
    UINavigationController *navigationController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet PersonalDiarySystemViewController *viewController;
@property (nonatomic, retain) UINavigationController *navigationController;

@end

#import "PersonalDiarySystemAppDelegate.h"
#import "PersonalDiarySystemViewController.h"

@implementation PersonalDiarySystemAppDelegate

@synthesize window;
@synthesize viewController;
@synthesize navigationController;

#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    // Set the view controller as the window's root view controller and display.
    self.window.rootViewController = self.viewController;
    navigationController = [[UINavigationController alloc] initWithRootViewController:self.window.rootViewController];  
    navigationController.navigationBar.tintColor = [UIColor   
                                                         colorWithRed:217.0/255   
                                                         green:33.0/255 
                                                         blue:0   
                                                         alpha:1];
    navigationController.navigationBarHidden = YES;
    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

Мой rootviewcontroller пытается загрузить другой viewcontroller в стек контроллеров навигации в своем методе viewDidLoad, но по какой-то причине представление не получаетсянажал:

-(void) viewDidLoad{    
    lvc = [[LoginViewController alloc] init];
    //lvc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [lvc setDelegate:self]; 
    //[self presentModalViewController:lvc animated:YES];   
    [self.navigationController pushViewController:lvc animated:YES];    
}

Я не получаю ошибок, поэтому не уверен, что происходит ... использование presentModalViewController работает ... так что я действительно в замешательстве !!

Ответы [ 4 ]

2 голосов
/ 30 июля 2011

Вам необходимо присвоить lvc LoginViewController.

- (void) viewDidAppear
{    
    [self performSelector:@selector(loginCheck:) withObject:nil afterDelay:0.5];
}    
- (void) loginCheck:(id)sender
{
    LoginViewController * lvc = [[LoginViewController alloc] init];
    //lvc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [lvc setDelegate:self]; 
    //[self presentModalViewController:lvc animated:YES];   
    [self.navigationController pushViewController:lvc animated:YES];   
}
1 голос
/ 30 июля 2011

Поместите свой

[self.navigationController pushViewController:loginViewController];

в метод

- (void)viewDidAppear:(BOOL)animated 

.ViewControllers navigationController не загружается до тех пор

0 голосов
/ 30 июля 2011
- (void)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
    self.navController = navigationController;
    [mainViewController release];
    [navigationController release];

    // Configure and display the window.
    [window addSubview:navController.view];
    [window makeKeyAndVisible];
}

- (void)viewDidLoad{    
    lvc = [[LoginViewController alloc] init];
    [self.navigationController pushViewController:lvc animated:YES];    
}
0 голосов
/ 30 июля 2011

Есть две вещи, которые могут пойти не так.Во-первых, вы выделяете контроллер навигации в applicationDidFinishLaunching, я не совсем уверен, что идет первым, applicationDidFinishLaunching или viewDidLoad.

Как вы уже видели, вы сначала устанавливаете свой корневой контроллер вида,затем выделите контроллер навигации, затем, возможно, viewDidLoad, запущенный сразу после установки корневого контроллера вида, затем выделите контроллер навигации.поэтому слова в viewDidLoad могут не работать, потому что в то время контроллер навигации еще не родился.

Но я не совсем понимаю, что предыдущее объяснение работает.это просто возможность.

Есть еще одна странная вещь: вы устанавливаете панель навигации своего контроллера навигации скрытой

navigationController.navigationBarHidden = YES;

Тогда кажется, что пользователь не может вернуться к корневому представлению.контроллер, поэтому навигационный контроллер не выдвигает контроллер вида входа в систему.Между тем, контроллер модального представления может быть отклонен со скрытой панелью навигации или без выделения навигационной панели, поэтому он работает, когда вы представляете его как контроллер модального представления.

, но я все еще не совсем уверен в этомтак как у меня сейчас есть некоторые проблемы с XCode, поэтому я не могу проверить две предыдущие идеи, извините за это.но я все же рекомендую установить navigationBarHidden на NO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...