【问题标题】:How to push a xib from View Controller如何从视图控制器推送 xib
【发布时间】: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];

我无法找到正确的方法。请帮忙。

【问题讨论】:

  • 崩溃说明了什么?
  • '不支持多次推送同一个视图控制器实例()'@Mr.T
  • 它说,您正在尝试推送 homeVC,而 homeVC 已经在堆栈上。你现在的 VC 是什么?
  • 我现在的VC是WelcomeVC @Mr.T
  • 欢迎VC有导航控制器吗?

标签: ios objective-c xcode uinavigationcontroller nib


【解决方案1】:

首先尝试使用导航控制器设置视图控制器

@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] 警告:尝试在 上显示 ,其视图不在窗口层次结构中!
  • 现在我收到此消息日志并出现黑屏
  • 你在哪里调用 [self.navigationController pushViewController:homeScreen animated:YES]; ?
猜你喜欢
  • 1970-01-01
  • 2010-12-11
  • 2016-10-22
  • 2023-04-09
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 2020-11-24
相关资源
最近更新 更多