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文件吗?
在我工作的最后一个应用程序中,我在Storyboard中工作了很多,是的,我同意样板代码在一段时间后变得非常烦人,但据我所知使用prepareForSegue是使用segue时传递参数的唯一方法.
您无法从Storyboard本身在自定义视图控制器上分配属性/委托.
如果我必须构建一个中小型应用程序(不是太多的视图,而不是它们之间的很多交叉导航)我肯定会使用Storyboards.但是当你有很多观点和它们之间的大量来回导航时,让故事板变得干净整洁真的很复杂,感觉你强迫自己使用实际上并不是最好的东西.
另一方面,我觉得Storyboard可以让你更容易从头开始了解应用程序的流程和一般外观,你甚至可以使用它们来创建实际上看起来像真实的模型.
因此,从本质上讲,它归结为您在启动项目时的需求.
编辑:
另一件需要考虑的事情是:如果您使用SVN/Git或任何其他VCS与团队合作,Storyboard文件冲突是一个完全的婊子.
我同意这是一个丑陋的代码,为了平滑我的愿景,我创建了一个宏:
#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美分......
| 归档时间: |
|
| 查看次数: |
1105 次 |
| 最近记录: |