用于组织UIViewController过渡的设计模式

时间:2013-04-11 14:43:10

标签: ios objective-c design-patterns

我正试图想出一个很好的方法来组织UIViewControllers之间的转换,从控制器本身中删除逻辑。我想出了一个基于我喜欢的Pro ObjC设计模式书的模式,但我想知道如何改进它。

简而言之。原谅半伪代码。

我将UINavigation Controller子类化,并创建了一个方法,所有View Controllers在需要转换时都会调用它。

-(void)requestViewChangeByObject:(id)object withData:(object*)someData{

    if ([object isKindOfClass:[ViewController1 class]]) {
        [self showViewController2Animated:YES withSomeData:nil];    
    }

    if ([object isKindOfClass:[ViewController2 class]]) {
        [self showViewController3Animated:YES withSomeData:someData];
    }

    if...
}

然后我只为每个控制器定义了方法。有些只是实例化并推送控制器和一些设置属性或传递信息。

-(void)showViewController2Animated:(BOOL)animated withSomeData:(object*)someDataVariable{

    viewController2 *VC2 = [viewController2 defaultViewController];
    [self pushViewController:VC2 animated:animated];
}

-(void)showViewController3Animated:(BOOL)animated withSomeData:(object*)someDataVariable{

    viewController3 *VC3 = [ViewController3 defaultViewController];
    VC3.someData = someDataVariable 
    [self pushViewController:VC3 animated:animated];
}

我这样做的原因是因为它使应用程序在更改控制器顺序和添加/删除控制器方面更加灵活,因为设计和要求发生了变化。我们也倾向于重复使用应用程序,这样可以更轻松地重新组织和重组以构建新的应用程序。

我遇到的主要问题是应用程序越复杂,所有if语句将获得的方法越大。如果请求来自viewController3,如果涉及更多逻辑而不仅仅是推送viewController2,可能会让人感到困惑。我真的很想知道如何改进它,以便它更灵活,更不容易造成混淆和错误。

其次,当您向问题添加传递数据时,它不是很灵活。我最终取出了接受数据对象的参数,并创建了一个单独的单例管理器对象来处理保存/获取我需要的数据,我理解这不是好设计。但是,当我尝试在像Apple建议的控制器之间来回传递数据时(即在上面的代码中设置控制器上的属性),它只是变得混乱,我觉得有更好的方法来做到这一点。

所以对此有任何建议将不胜感激。

0 个答案:

没有答案