Прозрачный фон с модальным UIViewController

У меня есть дилемма, я хочу представить пользователю полупрозрачное представление.

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

Это решение работы, представление ниже все еще видимо, и Представление, 'полумодально'. Проблема, если родительское представление наследовалось UITableViewController (как мой делает), то представление I 'нажатий' на него, не покрывает панель навигации наверху.

Я действительно не хочу входить в ситуацию, где я вынужден включить / отключают средства управления на панели навигации каждый раз, когда я продвигаю это представление, таким образом, я задавался вопросом, если кто-либо знал каких-либо решений, что я мог использовать так, чтобы представление, которое я продвигаю на UITableViewController, на самом деле 'протолкнуло' панель навигации?

20
задан coneybeare 5 April 2010 в 13:47
поделиться

2 ответа

Забавно, вчера я делал то же самое. К сожалению, это кажется невозможным. После установки контроллера модального представления предыдущее представление становится скрытым. См. Этот предыдущий вопрос по теме .

Вы по-прежнему можете использовать контроллер представления и файлы 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 , если вы хотите, чтобы анимация отображалась снизу экрана - мне было просто лень сделай это.

13
ответ дан 30 November 2019 в 00:22
поделиться

Вы пробовали перебирать подпредставления контроллера модального представления и настраивать цвет фона на очистку для каждого представления? Это рекурсивная функция 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 .

-2
ответ дан 30 November 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: