Ответ обновлен для iOS 8
По-видимому, в iOS 8 UIDimmingView
имеет распознаватель жестов касания, который мешает начальной реализации, поэтому мы игнорируем его и не требуем его сбоя.
Это возраст скорости, поэтому большинство, вероятно, просто копируют код выше ... Но, к сожалению, я страдаю от OCD, когда дело доходит до кода.
Вот модульное решение, которое использует ответ Данило Кампоса с категориями . Он также решает важную ошибку, которая может возникнуть, если вы отклоняете свой модал другими способами, , как упоминалось .
ПРИМЕЧАНИЕ: Существуют операторы if, потому что я использую контроллер представления как для iPhone, так и для iPad, и только iPad нужно регистрировать / отменять регистрацию.
ОБНОВЛЕНИЕ: Суть была обновлена, поскольку она не работала должным образом с потрясающим кодом FCOverlay и не позволяла распознавать жесты в представленном представлении. , Эти проблемы исправлены.
Использовать категорию так же просто, как:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (self.presentingViewController) {
[self registerForDismissOnTapOutside];
}
}
- (void)viewWillDisappear:(BOOL)animated
{
if (self.presentingViewController) {
[self unregisterForDismissOnTapOutside];
}
[super viewWillDisappear:animated];
}