Защо не мога да използвам pushViewController с UIButton?

Искам да използвам pushViewController, но не мога. Спомням си, че мога да използвам този код в xcode3.

Ето код в IBAction Button

-(IBAction)changtoCal:(id)sender
{
    NSLog(@"get in");
    UINavigationController *cal_nav = [[UINavigationController alloc] initWithNibName:@"calculator" bundle:nil];
    [self.navigationController pushViewController:cal_nav animated:YES];
}

Не се натиска. Защо ??? Бихте ли ми казали и как да го натисна ???

И ето го моят AppDelegate .h

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    UINavigationController *navigationController;
}

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@property (strong, nonatomic) IBOutlet UINavigationController *navigationController;

@end

.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [_window addSubview:[navigationController view]];
    [self.window makeKeyAndVisible];
    return YES;
}

person crazyoxygen    schedule 02.04.2012    source източник


Отговори (2)


Предполагам, че UIViewController не е правилно вградено в UINavigationController. Това би означавало, че self.navigationController = nil.

Не познавам XIB, но можете да го поправите, като направите следното:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    UINavigationController *navc = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = navc;
    [_window addSubview:navc.view];
    [self.window makeKeyAndVisible];
    return YES;
}
person Felix Lamouroux    schedule 02.04.2012
comment
sry, срива се и се показва. *** Прекратяване на приложението поради неуловено изключение „NSInvalidArgumentException“, причина: „Натискането на контролер за навигация не се поддържа“ - person crazyoxygen; 02.04.2012
comment
Схванах го. Когато комбинирам берилий и FelixLam заедно, мога да прокарам това. Благодаря и на двама ви :))) - person crazyoxygen; 02.04.2012

Трябва да създадете екземпляр на вашия персонализиран UIViewController в IBAction, а не нов UINavigationController

// change UICalculatorViewController to your view controller
UICalculatorViewController *cal_nav = [[UICalculatorViewController alloc] initWithNibName:@"calculator" bundle:nil];
[self.navigationController pushViewController:cal_nav animated:YES];
person beryllium    schedule 02.04.2012
comment
Схванах го. Когато комбинирам берилий и FelixLam заедно, мога да прокарам това. Благодаря и на двама ви :))) - person crazyoxygen; 02.04.2012