如何从视图控制器推送 xib
Posted
技术标签:
【中文标题】如何从视图控制器推送 xib【英文标题】:How to push a xib from View Controller 【发布时间】:2016-02-11 18:19:03 【问题描述】:我正在制作一个他们不是故事板的项目。
我对xib不太了解。
我在从 Xib 推送 ViewController 时遇到问题。
在我曾经使用的故事板中:
[self.navigationController pushViewController......];
但是在这里我该怎么办:
我正在尝试使用此代码:
HomeScreenVC *homeScreen = [[HomeScreenVC alloc]initWithNibName:@"HomeScreenVC" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:homeScreen];
[navController pushViewController:homeScreen animated:YES];
但它会崩溃,并且有效的代码是:
UINavigationController *myNavigation = [[UINavigationController alloc] initWithRootViewController:self.signInVC];
[controller presentViewController:myNavigation animated:YES completion:nil];
我无法找到正确的方法。请帮忙。
【问题讨论】:
崩溃说明了什么? '不支持多次推送同一个视图控制器实例(首先尝试使用导航控制器设置视图控制器
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//The first view controller
self.firstController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
//The navigation controller
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:self.firstController];
[self.window addSubview:navController.view];
self.window.rootViewController = navController;
[self.window makeKeyAndVisible];
return YES;
假设 ViewController 是您推送到新视图控制器的类,请尝试以下操作:
@implementation ViewController
- (void)goToHomeScreen
HomeScreenVC *homeScreen = [[HomeScreenVC alloc]initWithNibName:@"HomeScreenVC" bundle:nil];
[self.navigationController pushViewController:homeScreen animated:YES];
【讨论】:
不要使用与答案中发布的相同的行。将 ViewCONtroller 替换为 WelcomeScreen VC @RahulMishra【参考方案2】:您的代码块 1 崩溃是因为:
HomeScreenVC *homeScreen = [[HomeScreenVC alloc]initWithNibName:@"HomeScreenVC" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:homeScreen];
[navController pushViewController:homeScreen animated:YES];
您已将主屏幕添加到导航控制器,并再次尝试推送同一个控制器。
你的根视图控制器(welcomeVC)没有导航控制器,所以它不能推送任何视图控制器(它只能呈现,因此第二个代码被阻止对你有用)。您必须从具有主屏幕作为根视图控制器的欢迎 VC 中呈现导航控制器。
或者
您需要在您的应用委托中将导航控制器添加为根视图控制器(在导航堆栈中有 WelcomeVC),然后通过简单地调用将 homeVC 推送到 WelcomeVC 中:
[self.navigationController pushview....
AppDelegate:在此处将导航控制器设置为根视图控制器:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
WelcomeVC *mainViewController = [[WelcomeVC alloc]initWithNibName:@"WelcomeVC" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController: mainViewController];
self.window.rootViewController = navController;
[self.window makeKeyAndVisible];
return YES;
然后推送到你想要的控制器:
HomeScreenVC *homeScreen = [[HomeScreenVC alloc]initWithNibName:@"HomeScreenVC" bundle:nil];
[self.navigationController pushViewController:homeScreen animated:YES];
【讨论】:
2016-02-12 00:26:09.151 MyApp[39931:821657] 警告:尝试在以上是关于如何从视图控制器推送 xib的主要内容,如果未能解决你的问题,请参考以下文章