1

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

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

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

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

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

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

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

4

2 回答 2

2

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

你可以这样做myNavigationController.navigationBarHidden = YES;对于一个UINavigationCOntroller

文档在这里

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

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

myTabBarController.tabBar.hidden = YES;
[[myTabBarController.view.subviews objectAtIndex:0] setFrame:CGRectMake(0, 0, 320, 480)]; // or whatever your screen dimensions are
于 2012-07-18T20:07:49.627 回答
1

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];
于 2012-07-18T20:10:01.613 回答