0

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

简而言之,模式。原谅半伪代码。

我对 UINavigation 控制器进行了子类化,并创建了一个所有视图控制器在需要转换时调用的方法。

-(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 建议的控制器之间来回传递数据时(即在控制器上设置属性,如上面的代码),它变得一团糟,我觉得有更好的方法来做到这一点。

因此,对此的任何建议将不胜感激。

4

0 回答 0