第一次我在这里发布一个问题,其中包含实际可用的代码!但是,我相信有一种方法可以减少代码中的行数。我希望上师能指引我。重构iOS代码:减少代码行数
这里是故事板窗口以供参考:
我有一个主视图控制器与containerView。 ContainerView拥有自己的导航控制器。主视图控制器左边的每个按钮(B1-B5)塞格的相应场景编号。即B2将场景2推到堆栈上。 B4将场景4推到堆叠上。如果visibleViewContoller是场景5,并且用户按下B1,它将弹出所有viewController,直到我们到达场景1为止。等等等等。
再次跌破代码工作正常,我只是希望缩小代码的大小为B1和B2:
- (IBAction)B1Pressed:(id)sender {
UINavigationController *navController = [self.childViewControllers objectAtIndex:0];
NSMutableArray *VCs = [navController.viewControllers mutableCopy];
UIViewController *visibleViewController = [navController visibleViewController];
if (visibleViewController == [VCs objectAtIndex:0])
{
return;
}
else if (visibleViewController ==[VCs objectAtIndex:1])
{
[navController popViewControllerAnimated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:2])
{
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:3])
{
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:4])
{
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:5])
{
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];
}
}
- (IBAction)B2Pressed:(id)sender {
UINavigationController *navController = [self.childViewControllers objectAtIndex:0];
NSMutableArray *VCs = [navController.viewControllers mutableCopy];
UIViewController *visibleViewController = [navController visibleViewController];
if (visibleViewController == [VCs objectAtIndex:0])
{
STLMEatDrinkViewController *stlmEDVC = [self.storyboard instantiateViewControllerWithIdentifier:@"B2"];
[navController pushViewController:stlmEDVC animated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:1])
{
return;
}
else if (visibleViewController ==[VCs objectAtIndex:2])
{
[navController popViewControllerAnimated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:3])
{
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:4])
{
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:5])
{
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];
}
}
现在想象写相同的代码三次为B3Pressed,B4Pressed和B5Pressed。我认为这是太多的代码,我几乎肯定有一个更好的方法来做到这一点。
谢谢。
也许更适合于[代码审查(http://codereview.stackexchange.com/) – 2013-02-09 22:00:43