2012-06-27 4 views
1

Я представляю контроллер модального представления для различных параметров пользовательского интерфейса в приложении iOS. Одна из этих настроек позволяет пользователю выбрать другой основной вид. Когда они нажимают «Готово», я хочу отказаться от модального представления и отобразить недавно выбранный контроллер представлений без мгновенной задержки, когда старый контроллер просмотра перейдет к новому контроллеру представления. Как это можно реализовать?Представить другой контроллер просмотра после отклонения контроллера Modal View

Update:

Вот метод, который я успешно реализован с использованием техники Юджина, но без приложения делегата. Вместо этого эта реализация специфична для моего сценария, когда контроллер представления в стеке навигации представляет собой контроллер модального представления в приложении Utility.

- (void)swapFrontSideViewController; 
{ 
    UINavigationController *navigationVC = (UINavigationController *)[self presentingViewController]; 
    NSMutableArray *viewControllers  = [NSMutableArray arrayWithArray:navigationVC.viewControllers]; 
    UIViewControllerSubclass *selectedViewController = nil; 
    if ([self.selectedFrontSide isEqualToString:FRONT_SIDE_NAME1]) { 
     selectedViewController = [self.storyboard instantiateViewControllerWithIdentifier:FRONT_SIDE_NAME1]; 
    } else if ([self.selectedFrontSide isEqualToString:FRONT_SIDE_NAME2]) { 
     selectedViewController = [self.storyboard instantiateViewControllerWithIdentifier:FRONT_SIDE_NAME2]; 
    } 
    if (selectedViewController) { 
     [viewControllers replaceObjectAtIndex:viewControllers.count -1 withObject:selectedViewController]; 
     [navigationVC setViewControllers:viewControllers]; 
     self.delegate = selectedViewController; 
    } else { 
     NSLog(@"Error: Undefined Front Side Selected."); 
    } 
} 
+0

Что вы сделали? – Bazinga

ответ

3
- (IBAction)doDismiss:(id)sender { 
    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; // Get the app delegate 
    NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:appDelegate.navigationController.viewControllers]; // fetch its navigationController viewControllers stack 
    UIViewController *replacementController; //initialize replacement controller 
    [viewControllers replaceObjectAtIndex:viewControllers.count -1 withObject:replacementController]; // replace the top view controller in stack with the replacement one 
    [appDelegate.navigationController setViewControllers:viewControllers]; //change the stack 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

+1 за то, как вы выберете 'UIViewControllers' и замените его. -1 для архитектуры, которую вы создали. – Peres

+0

@JackyBoy Что случилось с этой архитектурой? – Eugene

+3

Я должен быть честен с вами, мне не очень нравится иметь какую-либо ссылку или связь с «AppDelegate», она создает приложение, в котором я уверен, что если вы думаете немного больше, вы найдете решение, которое не будет Мне нужна эта ссылка. Делает код более простым и избегает жесткой связи. – Peres

Смежные вопросы