【问题标题】:Transitioning from UIImagePickerController to a second UIViewController从 UIImagePickerController 过渡到第二个 UIViewController
【发布时间】:2012-07-19 04:13:58
【问题描述】:

在 Objective-C 中仍然感觉很绿 - 构建我的第一个“真正的”项目并在早期遇到了架构障碍..

我想在完全“自定义”的环境中展示我的视图和导航 - 例如。我隐藏了所有内置 UI 控件的东西(例如 UINavigationController 或 UITabBar)。一个具体的例子(如标题所示):从“主”视图直接移动到 UIImagePickerController,然后直接从 UIImagePickerController 移动到新的第三个视图。

这是我正在使用的三个主要视图控制器:

  • MainViewController(UIViewController 的自定义子类,包含我的主导航,通常是我的主要或“父”控制器)
  • ImageEditViewController(UIViewController 的自定义子类,其中我将一些控件覆盖在存储的图像之上)
  • UIImagePickerController(Apple 内置类)

我可以想象出几种方法(但我不知道如何做任何一种):

  1. 使用 UINavigationController 或 UITabBar 实现,但以某种方式隐藏系统 UI 控件并实现我自己的。我被阻止使用这种方法是因为 - 很简单 - 我不知道如何隐藏系统 UI 控件
  2. 在代码中的特定点手动调用控制器到控制器或视图到视图的转换。我有点喜欢这种方法,但我无法找出在我的控制器之间实例化、管理和转换的最佳“方法”。我不知道的事情的例子:我如何从我的主视图控制器调用第二个视图控制器?如何直接从第二个视图控制器调用第三个视图控制器? (或者至少直接过渡到第三个!)

我认为这里有一个简单的解决方案;只是关于在 Apple 的帮助类之外管理视图和视图控制器的知识我还没有学到。

【问题讨论】:

    标签: objective-c ios cocoa-touch


    【解决方案1】:

    您在说什么系统 UI 控件?导航栏?

    你可以做myNavigationController.navigationBarHidden = YES; UINavigationCOntroller

    文档here

    至于你应该有什么样的导航,这真的取决于你的用例。您是否正在尝试实现层次结构或工作流程?那么也许导航控制器就是您想要的。每个视图控制器是否都是一个独立的部分,不一定遵循工作流程?然后标签栏控制器可以工作。

    对于标签栏,您应该能够执行以下操作:

    myTabBarController.tabBar.hidden = YES;
    [[myTabBarController.view.subviews objectAtIndex:0] setFrame:CGRectMake(0, 0, 320, 480)]; // or whatever your screen dimensions are
    

    【讨论】:

    • 是的 - 抱歉 - 我说的是 UINavigationController 和 UITabBar - 我会更新这个问题,但你可能刚刚解决了我的问题 :)
    【解决方案2】:

    1。 隐藏导航栏,很简单:

    self.navigationController.navigationBarHidden = YES;
    

    隐藏 TabBar 使用这个:

    - (void) hideTabBar:(UITabBarController *) tabbarcontroller {
    
    
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.5];
    for(UIView *view in tabbarcontroller.view.subviews)
    {
    if([view isKindOfClass:[UITabBar class]])
    {
        [view setFrame:CGRectMake(view.frame.origin.x, 480, view.frame.size.width, view.frame.size.height)];
    } 
    else 
    {
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 480)];
    }
    
    }
    
    [UIView commitAnimations];
    
    
    
    
    
    }
    
    - (void) showTabBar:(UITabBarController *) tabbarcontroller {
    
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.5];
    for(UIView *view in tabbarcontroller.view.subviews)
    {
    
    if([view isKindOfClass:[UITabBar class]])
    {
        [view setFrame:CGRectMake(view.frame.origin.x, 431, view.frame.size.width, view.frame.size.height)];
    
    } 
    else 
    {
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 431)];
    }
    
    
    }
    
    [UIView commitAnimations]; 
     }
    

    2.

    如果您想轻松地向后导航,您应该使用导航控制器,它允许您在完成后弹出视图控制器。或者你可以做这样的事情(在导航控制器之外):

    CustomViewController *controller = [[CustomViewController alloc] init];
    
    [self presentModalViewController:controller animated:YES];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多