Вывод нескольких просмотров из контроллера навигации - PullRequest
4 голосов
/ 12 января 2012

У меня есть приложение, корневое представление которого представляет собой меню с 4-мя табличными представлениями, которое пользователь использует для настройки поискового запроса, выбрав ячейку, которая загружает другое подпредставление, поэтому базовая структура выглядит следующим образом

Root View
- Parent View (search view)
--Sub View (user selects variables here to fill search parameters of the parent view

Но один из параметров поиска Родительского представления требует другого вспомогательного представления, которое будет помещено в стек навигации, чтобы оно выглядело как

Root View
- Parent View (search view)
--Sub View (user selects variables here to fill search parameters of the parent view
---Sub View (related values to the previous subview i.e. Model / sub model)

Я хотел бы знать, есть ли способ вернуться к РодителюПредставление из этого подпредставления. Я знаю, что вы можете открыть одно представление или вернуться в rootview, но в этом случае я хочу вывести два подпредставления ... возможно ли это?

Ответы [ 2 ]

11 голосов
/ 12 января 2012

UINavigationViewController

popToViewController: анимированные:

Выводит контроллеры представления, пока указанный контроллер представления не окажется на вершине стека навигации.

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
2 голосов
/ 28 марта 2013

Вы можете добавить категорию в UINavigationController, чтобы разрешить одновременное подключение нескольких контроллеров.

UINavigationController + VariablePop.h

#import <UIKit/UIKit.h>

@interface UINavigationController (VariablePop)

- (NSArray *)popViewControllers:(int)numPops animated:(BOOL)animated;

@end

UINavigationController + VariablePop.m #import "UINavigationController + VariablePop.h"

@implementation UINavigationController (VariablePop)

- (NSArray *)popViewControllers:(int)numPops animated:(BOOL)animated {
    NSMutableArray* returnedControllers = [NSMutableArray array];
    int indexToPopTo = self.viewControllers.count - numPops - 1;
    for(int i = indexToPopTo+1; i < self.viewControllers.count; i++) {
        UIViewController* controller = [self.viewControllers objectAtIndex:i];
        [returnedControllers addObject:controller];
    }
    UIViewController* controllerToPopTo = [self.viewControllers objectAtIndex:indexToPopTo];
    [self popToViewController:controllerToPopTo animated:YES];
    return returnedControllers;
}

@end

А затем из контроллера вида вы можете:

NSArray* poppedControllers = [self.navigationController popViewControllers:2 animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...