У меня есть дилемма, я хочу представить пользователю полупрозрачное представление.
Я узнал путем экспериментирования что, если бы я просто продвинул прозрачное представление к вершине стека моего NavigationController, что это не представило бы уровень прозрачности, который я хотел. Таким образом, я решил просто добавить представление как подпредставление текущего представления наверху стека.
Это решение работы, представление ниже все еще видимо, и Представление, 'полумодально'. Проблема, если родительское представление наследовалось UITableViewController (как мой делает), то представление I 'нажатий' на него, не покрывает панель навигации наверху.
Я действительно не хочу входить в ситуацию, где я вынужден включить / отключают средства управления на панели навигации каждый раз, когда я продвигаю это представление, таким образом, я задавался вопросом, если кто-либо знал каких-либо решений, что я мог использовать так, чтобы представление, которое я продвигаю на UITableViewController, на самом деле 'протолкнуло' панель навигации?
Забавно, вчера я делал то же самое. К сожалению, это кажется невозможным. После установки контроллера модального представления предыдущее представление становится скрытым. См. Этот предыдущий вопрос по теме .
Вы по-прежнему можете использовать контроллер представления и файлы NIB, которые вы настроили - вот мой пример кода
- (void)showUpgrade {
[self.upgradeVC viewWillAppear:NO];
[self.view addSubview:self.upgradeVC.view];
[self.upgradeVC viewDidAppear:NO];
}
- (void)hideUpgrade {
[self.upgradeVC viewWillDisappear:NO];
[self.upgradeVC.view removeFromSuperview];
[self.upgradeVC viewDidDisappear:NO];
}
- (UpgradeViewController *)upgradeVC {
if (_upgradeVC == nil) {
_upgradeVC = [[UpgradeViewController alloc] initWithNibName:[NSString stringWithFormat:@"UpgradeView_%@", self.deviceType] bundle:nil];
_upgradeVC.delegate = self;
}
return _upgradeVC;
}
Вам нужно будет сохранить ссылку на родительский контроллер представления в контроллере модального представления, чтобы вы могли получить доступ к -hide
метод. Я сделал это через делегата.
Также было бы легко добавить анимацию к -show
и -hide
, если вы хотите, чтобы анимация отображалась снизу экрана - мне было просто лень сделай это.
Вы пробовали перебирать подпредставления контроллера модального представления и настраивать цвет фона на очистку для каждого представления? Это рекурсивная функция DFS.
- (void)setBackgroundToClearForView:(UIView *)view {
if ([view subviews]) {
for (UIView *subView in [view subviews]) {
[self setBackgroundToClearForView:subView];
}
}
if ([view respondsToSelector:@selector(setBackgroundColor:)]) {
[view performSelector:@selector(setBackgroundColor:)
withObject:[UIColor clearColor]];
}
}
Чтобы использовать это, вызовите:
[self setBackgroundToClearForView:self.view];
в viewDidLoad
.