Добавить подпредставление в UINavigationController, а затем вернуться к первому подпредставлению? - PullRequest
3 голосов
/ 20 августа 2011

У меня есть приложение на основе навигации, в которое я добавил ABPeoplePickerNavigationController в качестве подпредставления для моего Navigation Contorller, например: Я сохранил представление перед добавлением подпредставления в navView.

ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
peoplePicker.peoplePickerDelegate = self;

navView = [[UIView alloc] init];
navView = [[self.view superview] superview];

[[[self.view superview] superview] addSubview:[peoplePicker view]];

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

[[[self.view superview] superview] addSubview:navView];

Я не понимаю, я сохранил navView из подпредставления, теперь я не могу вернуть его обратно?

1 Ответ

1 голос
/ 20 августа 2011

Вам необходимо добавить кнопку возврата, например, так:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];   

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

Кроме того, способ, которым вы пытаетесь сослаться на свой первый вид, довольно запутанный / запутанный.Вы должны изменить его на что-то вроде:

[appDelegate.navigationController topViewController];    

или

[appDelegate.navigationController popToRootViewController];

Я не могу сказать вам наверняка, какой использовать, так как я не уверен в вашей точной иерархии представления, но я бы сказалНастоятельно рекомендуем вам попытаться оптимизировать этот код.

Я, вероятно, должен отметить, что кнопка возврата на навигационном контроллере и две строки ниже, которые делают разные вещи.Кнопка назад возвращает вам один вид назад, тогда как popToRoot и topView предназначены для того, чтобы вернуть вас к самому первому viewController.

Редактировать: Изменен код кнопки возврата на код, который я на самом деле использую

Edit2: Только потому, что у меня здесь немного больше места, я могупопытаться понять вашу иерархию лучше.Это выглядит примерно так?

Root View                     or                 Root View
-> Group View                                    -> Group View
ABPeoplePicker View                              -> ABPeople Picker View

Root View
-> Group View
-> -> ABPeoplePicker

Это означает, что ABPeoplePicker вложен в группу, а он вложен в ваш корень?Я думаю, что это не работает, потому что то, что у вас есть на самом деле, является одним из двух на первой строке, а то, что вы хотите, это вторая строка.Поскольку я на самом деле не знаю, какой у вас есть, не видя его, я не могу сказать вам, что именно нужно изменить, но если вы хотите, чтобы он был полностью вложенным, как иерархия во второй строке, вам нужно подтолкнуть представление вашей группына контроллер корневого представления (который является вашим контроллером навигации), затем вы хотите снова нажать кнопку выбора людей на контроллер корневого представления.После этого ваша кнопка «Назад» и переключение вида должны работать так, как вы этого хотите.

...