【问题标题】:Switch between views in iOS在 iOS 中的视图之间切换
【发布时间】:2026-01-19 16:05:02
【问题描述】:

我尝试创建一个具有不同视图的应用。有两个视图,每个视图都有一个视图控制器。第一个视图是通过 AppDelegate 类中的rootViewController 加载的。现在我想通过单击一个按钮来加载另一个视图。

我尝试在我的第一个控制器中创建第二个视图控制器的实例并使用pushViewController 方法,但没有成功。项目已构建,但单击按钮后没有任何反应。

【问题讨论】:

  • 你是如何实例化第二个视图控制器的?您可以发布有关代码的图片吗?
  • @vincent 您需要在要推送的视图控制器类上分配和 initWithNibName。这个答案有一些好处:*.com/questions/1644293/…
  • @nykash - 谢谢,但我已经知道了?
  • @vincent 在下面查看我的答案...我引用的问题有示例。

标签: objective-c ios uiview uiviewcontroller


【解决方案1】:

更新了我的答案:

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
PasswordHandling *aPasswortHandler = [[PasswordHandling alloc] init]; 
self.passwordHandling = aPasswortHandler; [aPasswortHandler release]; 
UINavigationController *navigationController;
if ([passwordHandling passwordInKeyChain] == TRUE) { 
    LogInView *logInView = [[[LogInView alloc] initWithNibName: @"Log In View" bundle: nil] autorelease]; 
    navigationController = [[UINavigationController alloc] initWithRootViewController:logInView];
    //[navigationController pushViewController: logInView animated:NO];
} else { 
    CreateNewPasswordView *createNewPasswordView = [[CreateNewPasswordView alloc] initWithNibName:@"CreateNewPassword" bundle: nil]; 
    navigationController = [[UINavigationController alloc] initWithRootViewController:createNewPasswordView];
    //[navigationController pushViewController: createNewPasswordView animated:NO]; 
}

[self.window addSubview:navigationController.view]; 
[self.window makeKeyAndVisible]; return YES; 

【讨论】:

  • 这是我的 appDelegate 代码。 PasswortHandler 是一个与钥匙串通信的类- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; PasswordHandling *aPasswortHandler = [[PasswordHandling alloc] init]; self.passwordHandling = aPasswortHandler; [aPasswortHandler release]; if ([passwordHandling passwordInKeyChain] == TRUE) { //Passwort in Keychain
  • LogInView *logInView = [[[LogInView alloc] initWithNibName: @"Log In View" bundle: nil] autorelease]; [navigationController pushViewController: logInView animated:NO]; } else { CreateNewPasswordView *createNewPasswordView = [[CreateNewPasswordView alloc] initWithNibName:@"CreateNewPassword" bundle: nil]; [navigationController pushViewController: createNewPasswordView animated:NO]; } [self.window setRootViewController:navigationController]; [self.window makeKeyAndVisible]; return YES; } 启动后 iPhone 屏幕保持白色。怎么了?
  • 无法查看所有代码。您可以通过添加代码来更新您的问题吗? - 忽略这条评论,因为我无法删除它。
  • 仍然应该在这个方法中。这不是我的第一个问题。这是改成导航控制器引起的问题
  • 解决了。我想删除这一行:self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
【解决方案2】:

您必须将您的第一个 viewController 放在 UINavigationController 中,并将此 navigationController 设置为 rootViewController。然后当你点击你的按钮时,调用(假设你在你的第一个控制器中):

[self.navigationController pushViewController:secondViewController animated:YES];

【讨论】:

    【解决方案3】:

    检查以确保视图按钮的目标/操作设置正确,方法是右键/控制单击按钮以查看其连接弹出窗口。

    【讨论】:

      最近更新 更多