【问题标题】:iOS How to go to Previous to Previous ViewiOS 如何转到上一个视图
【发布时间】:2014-03-06 15:07:08
【问题描述】:

我有一种情况,我想从上一个视图转到上一个视图。 MainView 调用模态 CWViewC 调用模态 CRViewC 并调用模态 CRDViewC - 在 CRDViewC 中的操作事件上,我需要返回到 CWViewC 并更新它的组件。

我想在我的应用程序中使用 navigationController,但无法设置它,因此现在根本没有使用它。我也害怕玩Segue,还认为它可能会影响应用程序的兼容性:(。我在网上搜索了类似的情况,但找不到解决方案。

我可以考虑从 CRDViewC 向 CWViewc 发送任何类型的通知。但同样如何在两个类中实现它以及如何摆脱(我的意思是关闭)CRViewC。

所以请建议并指导我解决问题。

非常感谢任何帮助。谢谢。

编辑:

我的要求是我必须事先调用 LoginVC 并且我的主要 scrn 是 MAinTabVC。因此,我将我的应用程序设为 TabbedTemplate 并从 AppDelgate 调用我的 LoginVC 并在成功登录时从 AppDelegate 调用我的 MainTabVC。这就是我如何称呼我的登录名:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   // Override point for customization after application launch.

   // Get the StartupData properties from device
   MC_Utility *utility = [[MC_Utility alloc] init];
   self.theAppDataObject.startupData = [utility retrieveLocalData];
   NSLog(@"READ Loigin On Launch - %@",  self.theAppDataObject.startupData.loginOnLaunch);

   utility = nil;

   // Show Login view if not logged On
   if (!self.isLoggedIn) {
      [self showLoginScreen:NO];
   }

   return YES;
 }

 -(void) showLoginScreen:(BOOL)animated {
      // Get login screen from storyboard and present it
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    LoginViewController *loginViewController = [storyboard instantiateViewControllerWithIdentifier:@"loginViewController"];


    // Show Login
    if (theAppDataObject.startupData.loginOnLaunch.boolValue == true) {
        NSString *email = @"dylan@antila.co";
        NSString *pswd = @"t4Wzpg4OQ5q8ZNVDPPo7wg==";

        [loginViewController startLoginProcess:email :pswd];
     } else {
        [self.window makeKeyAndVisible];
        [self.window.rootViewController presentViewController:loginViewController animated:animated completion:nil];
     }
}

我通常使用此类代码显示的其他所有视图:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
MC_ChatWindowViewController *chatWindVC = [storyboard instantiateViewControllerWithIdentifier:@"chatWindowVC"];
[chatWindVC setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentViewController:chatWindVC animated:YES completion:nil];

在我的 AppDelegate 中,我曾尝试调用 mainTabVC,但没有成功。所以坚持使用原始代码。通过几个教程也尝试了几种方法,但无法做到。我是 iOS 开发的新手,我还不能适应使用 navControllers。

我已经通过情节提要在 LoginVC 中嵌入了 NavController。

在 MAinTAB .m 中添加的代码

@implementation MC_MainTabBarController

bool isLogged = false;

-(void) showLoginScreen:(BOOL)animated {
    NSLog(@"Calling Login from MainTab");
    // Get login screen from storyboard and present it
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    LoginViewController *loginViewController = [storyboard instantiateViewControllerWithIdentifier:@"loginViewController"];
    [loginViewController setModalPresentationStyle:UIModalPresentationFullScreen ];
    [self presentViewController:loginViewController animated:YES completion:nil];


    /* AUTO LOGIN
    // Show Login
    if (theAppDataObject.startupData.loginOnLaunch.boolValue == true) {
        NSString *email = @"dylan@antila.co";
        NSString *pswd = @"t4Wzpg4OQ5q8ZNVDPPo7wg==";

        [loginViewController startLoginProcess:email :pswd];
     } else {
        [self.window makeKeyAndVisible];
         [self.window.rootViewController presentViewController:loginViewController animated:animated completion:nil];
     } */
 }

-(void)viewWillAppear:(BOOL)animated { if (isLogged == false) { [self showLoginScreen:YES]; }

}

【问题讨论】:

  • “无法设置”是什么意思?是否存在技术问题,或者只是缺乏动力:p?在我看来,模态视图应该在非常特殊的情况下使用,对于经典导航,您应该使用 UINavigationController
  • @KIDdAe,在我的第一个视图中,即我嵌入在 NavContrl 中的 LoginVC 并且我在 LoginVC 的故事板中看到 NavigationItem。早些时候我已经编码导航到所有屏幕。在我的 Q 中。我添加了如何从登录转移到 MainTabVC 的代码。

标签: ios view navigation notifications


【解决方案1】:

正如您提到的 segues,我可以安全地假设您正在使用情节提要吗?如果是这样,请在 storyboard 文件中获取您的第一个视图控制器(带有 MainView 的那个),转到菜单栏中的 Product 菜单并选择 Embed In>Navigation Controller,如下图所示:

然后,将您的视图控制器之间的那些segues更改为Push而不是modal,因此从mainView到CWViewC的那一个将是Push,然后从CWViewC到CRViewC的那一个将是Push等等。

视图不会是模态的,但这是在一堆视图中前进的更自然的方式。

【讨论】:

  • 您能提供您在原始帖子中使用的代码吗?
  • 好的,感谢您提供的额外信息。澄清一下,您正在使用情节提要,并且您的 loginVC 嵌入在情节提要的导航控制器中,但是您正在通过代码处理导航?如果我没听错,那听起来很混乱。我真的建议坚持使用其中一个,因此如果您在情节提要中使用导航控制器,请坚持使用 segues 进行推送导航(您可以在代码中执行其他操作,这很好)。你能澄清一下吗?谢谢
  • UINavigationController 自 iOS 2.0 以来就已经存在,所以你会没事的。另外,iOS 6 和 iOS 7 加起来占活跃设备的 97%,所以没问题。如果您打算在使用故事板的项目中使用导航控制器(这通常是一个好主意,它是一种流行、有用且通用的在应用程序中处理导航的方法),我会坚持在故事板中推送 segue - 你可以将当前的 segues 从 Modal 更改为 Push。
  • 是的,这是可能的,但您需要确保该过程有意义。您将通过情节提要处理导航,对吗?我强烈建议您遵循本指南直到“为您的数据添加表格视图”这一点,因为它解释得非常好。请先试试这个,然后我会帮助解决其余的问题。 appcoda.com/…
  • 所以 MainTab 是/使用 UITabBarController?如果是这样,那应该始终是 rootViewController,然后我建议以模态方式呈现登录视图控制器。所以 InitialVC 是 root,然后在 InitialVC 的 viewWillAppear 中检查用户是否已登录。如果没有,以模态方式显示 LoginVC,这应该在 InitialVC 可见之前显示。用户登录后,您将关闭 loginVC,然后他们可以看到 initialVC。
猜你喜欢
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多