【问题标题】:Going back to the previous views回到以前的视图
【发布时间】:2013-06-26 12:34:34
【问题描述】:

我是iOS新手... 在我的项目中,我正在使用 addsubview...

导航到其他视图

我有很多意见,比如 1 到 7..

What i want is when i am on the 7th view or 6th view or 5th view i want to go back to the 2nd view on a button click..

我正在使用 UINavigationController 示例,但据我了解,我们只能转到上一个视图...

我使用了另一个示例,它将我带到root view.. 以下是代码

   NSArray *viewsToRemove = [self.view subviews];
    for (UIView *v in viewsToRemove) {
        [v removeFromSuperview];

那么我应该使用 UINavigationController 还是需要修改后使用上述方法??

任何想法我怎么能做到这一点..

请帮忙!!!!

谢谢。

我目前没有使用导航控制器,而是使用 addsubview 方法... 这是一个不好的做法,我是否特别需要导航控制.. 谢谢!!!

【问题讨论】:

  • 一般来说,我建议为此使用 UINavigationController。但是,如果您有充分的理由不使用 UINavigationController,例如您可能不想要的导航栏,那么仍然可以考虑将您的应用程序分成几个视图控制器,每个主要视图一个,并以模态方式呈现它们。
  • 我有 3 个按钮,希望它们出现在所有视图控制器上......就像一个简单的网站,每个页面上都有一个注销按钮。同样,我 3 个按钮回来了,主菜单和注销..每个都与自己的功能相关联...
  • 带有自定义导航栏的导航控制器可能是一个解决方案。
  • 好的..谢谢..即使我觉得导航视图控制器是一个很好的做法;)但我想把导航栏放在底部,有什么想法吗??
  • @Audi:查看此链接:stackoverflow.com/questions/5866283/…

标签: iphone ios objective-c uinavigationcontroller subview


【解决方案1】:

您可以使用导航控制器的以下方法移动到特定视图:

popToViewController:animated:

有关文档,请参阅 here

因此,如果您有 UINavigationController *navCon 并想移动到第二个视图,请使用以下代码:

UIViewController *vc = [navCon.viewControllers objectAtIndex:1];
[navCon popToViewController:vc animated:YES];

【讨论】:

  • 好的...实际上我有很多视图,每个视图都有一个共同的页脚...包含 3 个按钮...每个都打开其关联的视图控制器..所以我在想什么是最佳实践.. 即使用导航控件或使用下面给出的代码并使用 3 个按钮填充所有视图..
  • @Audi:如果这两种方法都给出了您需要的任何内容,那么就实践而言,UINavigationController 方式将是首选方式。但是你想要的和UINavigationContorller 提供的完全不同,那么你可以选择其他东西。
  • 但是你可以通过调整 UINavigationController 本身来走很长的路。
  • 所以考虑到我的场景我应该做什么......我在考虑工具栏......但我仍然必须将工具栏添加到每个视图......即每个 xib 文件...我找到了一个自定义导航控制器的教程 [链接]simplecode.me/2011/09/04/…
  • 当然去看看你会得到什么。 :) 我不会是一个好的法官,尤其是在不了解整个事情的情况下。
【解决方案2】:

如果您想从第 5 个视图转到第 2 个视图,请使用以下代码:

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[allViewControllers removeObject:self];//removing 5th
[allViewControllers removeLastObject];//removing 4th
[allViewControllers removeLastObject];//removing 3rd
self.navigationController.viewControllers = allViewControllers;

现在只需弹出导航控制器

【讨论】:

    【解决方案3】:

    请尝试关注,

    //This for loop iterates through all the view controllers in navigation stack.
    for (UIViewController* viewController in self.navigationController.viewControllers) {
    
        //This if condition checks whether the viewController's class is MyViewController
        // if true that means its the MyViewController (which has been pushed at some point)
        if ([viewController isKindOfClass:[MyViewController class]] ) {
    
            // Here viewController is a reference of UIViewController base class of MyViewController
            // but viewController holds MyViewController  object so we can type cast it here
            MyViewController *ObjmyViewController = (MyViewController*)viewController;
            [self.navigationController popToViewController:ObjmyViewController animated:YES];
        }
    }
    

    谢谢,

    【讨论】:

      【解决方案4】:
      for (UIViewController *viewcontroller in self.navigationController.viewControllers)
          {
              if ([viewcontroller isKindOfClass:[self.navigationController class]])
              {
                  UIStoryboard *story_profile=[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
      
                  FindFriends_ViewController *objc_prof = [story_profile instantiateViewControllerWithIdentifier:@"FindFriends_ViewController"];
      
                  [self.navigationController popToViewController:objc_prof animated:YES];
      
              }
          }
      

      【讨论】:

        【解决方案5】:

        甜蜜而简单的解决方案: 只需在调用函数的地方编写以下代码:

        - (IBAction)goToSecondViewController
        {
           NSArray *array = [self.navigationController viewControllers];
           [self.navigationController popToViewController:[array objectAtIndex:i] animated:YES];
           // where i indicates viewController number,In your case write 2 instead of i.
        }
        

        希望这对你有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-07
          • 2016-05-23
          • 1970-01-01
          • 2022-11-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多