第一次我在這裏發佈一個問題,其中包含實際可用的代碼!但是,我相信有一種方法可以減少代碼中的行數。我希望上師能指引我。重構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