저는 스토리 보드 기반 iPhone 응용 프로그램을 작성 중이며 상태 복원 작업을하고 있습니다. 일반적으로 segues를 수행 할 때 애니메이션을 적용하고 싶지만 탐색 계층 구조를 여러 수준으로 복원 할 때 마지막 segue 만 애니메이션으로 만들면됩니다. 두 세트의 segues를 설정하는 것 외에도 일반적인 push segue를 사용하는 세트와 애니메이션이 아닌 push custom segue를 사용하는 세트는 내가하려는 것을 달성 할 수있는 방법이 있습니까?애니메이션없이 밀어 넣기
13
A
답변
14
응용 프로그램의 섹 또는 스토리 보드와 독립적으로보기 컨트롤러 스택을 직접 조작 할 수 있습니다.
이 기법을 사용하면 뷰 컨트롤러의 깊은 스택을 복원하고 상위 뷰 컨트롤러에 단일 섹터 만 수행/애니메이션 할 수 있습니다. 예를 들어, 두 개의보기 컨트롤러 스택을 복원하려면 다음을 수행 할 수 있습니다 (이 용도로 특정 밀어 넣기 단락을 작성해야 할 가능성이 높습니다.)
예를 들어 두 개의보기 컨트롤러 스택을 복원하려면 다음을 수행 할 수 있습니다. 이 예제에서는 기존보기 컨트롤러의 일부 동작이 상태 복원으로 연결되지만 App Delegate에서 쉽게 수행 할 수 있다고 가정합니다.
[self performSegueWithIdentifier:@"Page2Express" sender:self];
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Page2Express"])
{
// Get any state data you need to from Core Data
CoreDataType *valuePulledFromCoreData = // ...
// Set up the page 2 view controller as you normally would
Page2ViewController *page2ViewController = segue.destinationViewController;
page2ViewController.instanceVariable = valuePulledFromCoreData;
// Create a loose, page 1 view controller and set it up as required
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
Page1ViewController *page1ViewController = [storyboard instantiateViewControllerWithIdentifier:@"Page1ViewController"]; // Ensure you have this identifier set up in your storyboard
page1ViewController.instanceVariable = valuePulledFromCoreData;
// Add the page 1 view controller to the top of the navigation stack (to be later obscured in the segue by the page 2 view controller)
NSMutableArray *viewControllers = [[self navigationController].viewControllers mutableCopy];
[viewControllers addObject:page1ViewController];
[self navigationController].viewControllers = viewControllers;
}
}
대신 애니메이션을 사용하지 않는 것이 더 편합니다. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
및 - (void)applicationWillEnterForeground:(UIApplication *)application
에서보기 컨트롤러 스택을 조작하여 (그리고 모든 세그먼트를 사용하지 않고) 상태를 복원 할 수 있습니다.
어느 쪽이든 기존의 스토리 보드 및 단편과 원활하게 연계하여 작동합니다.
흥미 롭다.'pushContController : animated :'를 사용하지 않고'viewControllers' 배열을 조작하는 이유가 있을까요? –
'pushViewController : animated :'는 스택에 뷰 컨트롤러를 추가 할뿐만 아니라 뷰 컨트롤러를 보여주기 위해 뷰를 새로 고칩니다. 이 경우 우리는 간단히'page1ViewController'를보고 싶지 않으므로 직접 스택에 추가해야합니다. –