2013-10-25 5 views
0

Обычно я использую раскадровку для своего iOS, но вам необходимо интегрировать SDK, который не использует раскадровку, а не xib. Мой контроллер начального представления - из раскадровки, и когда кнопка нажата (IBAction), я хотел бы, чтобы она перешла к контроллеру представления xib, но не знаю, как это сделать программно. Вот мой AppDelegate:Вызов NavigationController (xib) из ViewController (раскадровка)

//AppDelegate.m 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:...{ 

// set to storyboard on launch 
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard" 
                 bundle: nil]; 

UIViewController* viewController = [mainStoryboard instantiateInitialViewController]; 
[self.window setRootViewController:viewController]; 

[window makeKeyAndVisible]; 
return YES; 
} 

Вот мой код .h:

//mainVC.h 
#import <UIKit/UIKit.h> 

@interface MainVC : UIViewController{ 
UIWindow *window; 
UINavigationController *navigationController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 
@property (nonatomic, retain) IBOutlet UIButton *buttonScan; 

-(IBAction) ActionScan; 

@end 

И .m:

//mainVC.m 
@interface MainVC() 

@end 

@implementation MainVC 

@synthesize window; 
@synthesize navigationController; 
@synthesize buttonScan; 

- (IBAction)ActionScan{ 

window.rootViewController = navigationController; 
[window makeKeyAndVisible]; 

} 

ответ

0

создать экземпляр вашего XIb ViewController с initWithNibName

MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 

& затем нажмите этот экземпляр контроллера на навигационном контроллере

[self.navigationController pushViewController:desController animated:YES] 
+0

не работает. Я добавил AppDelegate.m, так что может помочь – Bachzen

+0

он должен работать. что за ошибка –

+0

вставьте код здесь –

0

В контроллере представления в раскадровке, код ниже:

  1. выделить & в то контроллер представления назначения:

    UIViewController *desController = [[SomeViewController alloc]init];

  2. показать контроллер представления назначения:

    [self.navigationController pushViewController:desController animated:YES]

    или

    [self.navigationController presentViewController:desController animated:YES completion:nil

0

Обычно вы не устанавливаете rootViewController окна напрямую. Вместо этого вы должны использовать

- (IBAction)ActionScan{ 
    [self presentViewController:self.navigationController animated:YES completion:nil]; 
} 

, чтобы показать ваш следующий контроллер. Первый и принятый ответ на этот вопрос дает более подробное объяснение того, как это работает.

Changing root view controller of a iOS Window

Установка window.rootViewController и вызова [окно makeKeyAndVisible] обычно бывает в делегат своего приложения, но так как вы используете раскадровки, это делается для вас под капотом.

Кроме того, если вы не используете несколько окон, вы можете получить доступ к своему UIWindow из любого места, используя объект Singleton для делегата приложения.

MyAppDelegateClass *appDelegate = (MyAppDelegateClass*)[[UIApplication sharedApplication] delegate]; 
UIWindow *mainWindow = appDelegate.window; 
+0

Если вы хотите, чтобы нажать другую точку зрения на navigationController что уже существует (и mainVC уже находится в стеке viewController), вам нужно удалить свои свойства и переменные экземпляра для navigationController и u se self.navigationController (который автоматически устанавливается вашим навигационным контроллером и скрыт вашей новой переменной с тем же именем) для доступа к существующему UINavigationController. После удаления свойства navigationController вызовите '[self.navigationController pushViewController: myViewController animated: YES]; ' – adamF

+0

Пожалуйста, примите этот ответ, если он сработает, или напишите более подробную информацию и код, показывающий, что именно не работает. – adamF

Смежные вопросы