Вызывается функция rejectViewControllerAnimated, но ViewController не отклоняется
У меня возникают проблемы с методом dismissViewControllerAnimated
, не закрывающим представление.
Что здесь происходит в приложении:
- Выбрана ячейка в
ItemViewController
.
- Просмотр push ed до
ItemDetailViewController
, и детали отправляются через делегат
- Пользователь выбирает "done", и событие отправляется через делегат, который должен быть закрыт в
ItemViewController
Все эти работы, за исключением View, не увольняются, ошибок нет. Кто-нибудь может понять, что не так?
- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller
{
NSLog(@"Controller: %@", controller);
// Returns - Controller: <ItemDetailViewController: 0x6b68b60>
[self dismissViewControllerAnimated:YES completion:nil];
}
Ответы
Ответ 1
Что делать, если вместо этого вы вызываете [controller.navigationController popViewControllerAnimated:YES]
?
В этом случае, если вы вызываете [controller dismissViewControllerAnimated:YES completion:nil]
вместо того, чтобы называть его self?
Ответ 2
Ответ на этой странице:
dismissviewcontrolleranimated-vs-popviewcontrolleranimated
rejectViewController используется, когда у вас нет навигационного контроллера.
Скорее всего, вы используете навигационный контроллер, затем используете self.navigationController вместо popViewController.
Также обратите внимание на lemax его замечание: используйте NULL, а не nill для обработчика завершения
Ответ 3
У меня возникла проблема в iOS5, где стандартный обратный вызов завершения не позволял виду полностью отклоняться (только текущий толкаемый вид этого модального)
[controller dismissViewControllerAnimated:YES completion:^ {
//
}];
Решение для iOS5 - не иметь обратного вызова:
[controller dismissViewControllerAnimated:YES completion:nil];
Ответ 4
Если возникла проблема, когда вызов dismissViewControllerAnimated
отклонил клавиатуру в UIViewController, но не сам просмотр.
Решил его с помощью двух вызовов:
[self dismissViewControllerAnimated:NO completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];
мгновенный для клавиатуры, а затем анимированный для контроллера
Ответ 5
Ваша ситуация -
ItemViewController → ItemDetailViewController (нажата на navigationController)
Self.dismissViewController(..) отклоняет контроллер представления, который представляется через себя (в случае с ухом это ItemViewController). Здесь вы не представили VC по себе, вместо этого вы нажали новый VC поверх навигационного стека. Итак, правильным способом отклонения элемента ItemDetailViewController будет
self.navigationController.popViewController(истина). пожалуйста, прочитайте описание функции rejectViewController (....), чтобы получить больше ясности.