Удалить текущий и текущий вид контроллера в объективе - c - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть контроллер таблицы, деталь V C. и деталь редактирования V C, которая позволяет удалить элемент. Табличное представление подается массивом элементов.

После удаления элемента я хотел бы не только отклонить правку V C, но и деталь V C под ним (поскольку элемент больше не существует), оставляя только обновленное представление таблицы.

Я могу успешно обновить представление таблицы с помощью уведомления и могу отклонить контроллер представления редактирования. Тем не менее, я не могу найти способ удалить деталь V C после того, как редактирование V C исчезает.

Пока что после подтверждения удаления с сервера в редактировании V C У меня есть:

[self dismissViewControllerAnimated: NO completion:nil];
[self.presentingViewController dismissViewControllerAnimated: YES completion: nil];

Это отклоняет editV C, но не детали V C.

Я также отправляю уведомление об удалении, которое наблюдается как в виде таблицы V C, так и в детализации V C, и обработчик для обоих имеет одинаковый код отклонения. Я пробовал в каждом из них:

[self dismissViewControllerAnimated: NO completion:nil];
[self.presentingViewController dismissViewControllerAnimated: YES completion: nil];

Но подробное представление по-прежнему не отклоняется.

Следует отметить, что это подробное представление (например, pu sh и Edit). является модальным контроллером представления, встроенным в его собственную навигационную систему. Первая навигация является частью TabViewController в основной раскадровке

Редактировать:

Если это имеет какое-либо значение, метод удаления в третьем (правка) V C вызывается из AlertViewController .

Из документации Apple, простой вызов dismissViewController должен удалить все последующие VC в стеке навигации, но этого, похоже, не происходит:

Обсуждение

Представление контроллер представления ответственен за отклонение представленного контроллера представления. Если вы вызываете этот метод на самом представленном контроллере представления, UIKit просит, чтобы представляющий контроллер представления обработал отклонение. Если вы представляете несколько контроллеров представления подряд, тем самым создавая стек представленных контроллеров представления, вызов этого метода для контроллера представления, расположенного ниже в стеке, отклоняет его непосредственный дочерний контроллер представления и все контроллеры представления выше этого дочернего элемента в стеке. Когда это происходит, только самый верхний вид отклоняется в анимированном виде; любые промежуточные контроллеры представления просто удаляются из стека. Самое верхнее представление отклоняется, используя его модальный стиль перехода, который может отличаться от стилей, используемых другими контроллерами представления ниже в стеке. Если вы хотите сохранить ссылку на представленный контроллер представления контроллера, получите значение в свойстве presentViewController перед вызовом этого метода. Обработчик завершения вызывается после viewDidDisappear: метод вызывается на представленном контроллере представления.

enter image description here

1 Ответ

0 голосов
/ 08 апреля 2020

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

UINavigationController *mainNavigation = (UINavigationController *) self.navigationController.presentingViewController;
[self dismissViewControllerAnimated:YES completion:^{
    [mainNavigation popViewControllerAnimated:YES];
}];

Поместите вышеуказанный код в EditV C, это поможет.

...