故事板是否迫使你写出难看的代码?

Eca*_*ion 9 iphone storyboard ios segue

我一直用xib文件开发所有东西,因为我们需要支持iOS4.

现在我们终于只支持iOS5和iOS6,所以我决定尝试一下故事板,所以一切都很简单,但我发现自己做了很多这样的代码:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"AddPlayer"]) { //Ugly

        UINavigationController * navigationController = segue.destinationViewController;
        PlayerDetailViewController * playerDetailsViewController = [navigationController viewControllers][0]; //Super Ugly
        playerDetailsViewController.delegate = self;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道你们,但我发现这段代码非常丑陋且容易出错.

有没有更好的方式来使用Storyboard?我应该回到xib文件吗?

jer*_*ere 6

在我工作的最后一个应用程序中,我在Storyboard中工作了很多,是的,我同意样板代码在一段时间后变得非常烦人,但据我所知使用prepareForSegue是使用segue时传递参数的唯一方法. 您无法从Storyboard本身在自定义视图控制器上分配属性/委托.

  • 如果我只针对iOS 5和6,我会回去使用XIB吗?这取决于.

如果我必须构建一个中小型应用程序(不是太多的视图,而不是它们之间的很多交叉导航)我肯定会使用Storyboards.但是当你有很多观点和它们之间的大量来回导航时,让故事板变得干净整洁真的很复杂,感觉你强迫自己使用实际上并不是最好的东西.

另一方面,我觉得Storyboard可以让你更容易从头开始了解应用程序的流程和一般外观,你甚至可以使用它们来创建实际上看起来像真实的模型.

因此,从本质上讲,它归结为您在启动项目时的需求.

编辑:

另一件需要考虑的事情是:如果您使用SVN/Git或任何其他VCS与团队合作,Storyboard文件冲突是一个完全的婊子.

  • 版本控制文件的+1与Storyboard冲突.Apple不认为多人可能需要编辑故事板吗?吉兹 (2认同)

Rap*_*ira 5

我同意这是一个丑陋的代码,为了平滑我的愿景,我创建了一个宏:

#define WhenSegueIdentifierDo(segueIdentifier, block) if([segue.identifier isEqualToString:segueIdentifier]) block();
Run Code Online (Sandbox Code Playgroud)

在我的prepareForSegue中:

WhenSegueIdentifierDo(kModalVC1ToVC2, ^
{
    //code
});

WhenSegueIdentifierDo(kModalVC1ToVC3, ^
{
    //code
});
Run Code Online (Sandbox Code Playgroud)

我也使用常量而不是硬编码的字符串(虽然我不能在故事板上使用它们)来保持它更美观.我还使用约定:k + 类型的转换 + 原点视图控制器名称 + 到 + 目标视图控制器名称.

你也可以用

navigationController.topViewController
Run Code Online (Sandbox Code Playgroud)

代替

[navigationController viewControllers][0];
Run Code Online (Sandbox Code Playgroud)

只差我2美分......