2014-05-07 30 views
0

我是新来的Objective-C,和我正在寻找关于如何管理多个视图控制器一些建议。Objective-C的管理多个视图控制器

我已经查看了他们的内置容器视图控制器类的Apple文档,他们都不是我正在寻找 - 最接近的是NavigationController,但即使这似乎有点关闭。

我想要实现的一系列ViewControllers的 - 它们使用xibs他们的接口 - 从一个根据接下来的一系列规则的过渡。例如,在应用加载时,我们会看到本地存储中是否有userId - 如果我们不存在,请显示注册屏幕。接下来,有一个按钮(说)命令出租车 - 如果该按钮被点击,显示确认屏幕。

另外可选另外:我认为这不符合导航控制器的原因是流程看起来不是层次结构,而是一种分枝和线性。一个具体的例子是我不需要导航栏返回,这似乎是导航控制器上的标准。但我不太了解NavigationController,无法确定它是否适合此用例。

我一直在用各种方法破解这个。例如,在一个IBAction为处理程序中,我使用此代码过渡到一个新的视图控制器中:

UIViewController *view = [[UIViewController alloc] initWithNibName:@"CCWConfirmViewController" bundle:nil]; 
view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentViewController:view animated:YES completion:nil]; 

而且,在我的窗口的“根”视图控制器(我设置是SignupViewController)initWithNibName,我返回不同的视图控制器不是一个要求,根据本地存储的呼叫我前面提到的结果:

if (currentUser.userId) { 

     // Instead of returning the SignupViewController, like was asked, 
     // return the MainViewController, since signup isn't needed for existing 
     // users. 
     CCWMainViewController *mvc = [[CCWMainViewController alloc] init]; 
     return mvc; 

我看起来像我必须做一些错误的(第二黑客建立而产生警告,因为我正在返回一个指向错误类型的指针)。任何人都知道更好的方法?毕竟是我的NavigationController,而我只是误解了它的目的?我只需要实现一个自定义容器来充当我的RootViewController并管理这些其他ViewControllers?

回答

1

你的决定是对的。你不需要一个导航控制器来达到你的目的,但正如他们所说的那样。有很多方法可以实现结果。

“我并不需要一个导航栏回去,这似乎标配的导航控制器”

您可以随时隐藏使用self.navigationController.navigationBarHidden = YES

导航栏回来的时候,我不会说你做了什么是错的,但会提出一个更好的办法,涉及观点遏制的概念。

在可可触摸您可以添加任何视图控制器作为子视图控制器。所以这是我的建议。 创建一个名为RootViewController的类,无论用户登录或不登录,始终都会创建并设置为您的窗口。在这个类别的viewDidLoad

-(void)viewDidLoad 
{ 
    if (currentUser.userId) { 
     CCWMainViewController *mvc = [[CCWMainViewController alloc] init]; 
     [self addChildViewController:mvc]; 
     mvc.view.frame = self.view.bounds; 
     [self.view addSubview:mvc.view]; 
    } 
    else{ 
    //Create signup/login view and add to view as above. 
    } 
} 
+0

嘿,我真的很喜欢这个。看起来编译器并不喜欢这个:[self。查看addSubview:mvc.view.frame] - 它应该是[self.view addSubview:mvc.view](没有'帧'调用结束)? –

+0

对不起,我的坏!复制粘贴的副作用:)你是对的,请看我的编辑我的答案。 – Suhas

相关问题