Определение того, представлен ли UIViewController модально

Главное окно моего приложения содержит UITabBarController на основе xib (полностью настроенный в Interface Builder), который также может быть представлен модально (во многом как модальное представление Music.app «Добавить песни в список воспроизведения»). UITabBarController содержит ряд UINavigationController, которые, в свою очередь, содержат подклассы UITableViewControllers. Вот как я в настоящее время определяю, представлен ли подкласс UITableViewController внутри модального UITabBarController:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.isModal = NO;

    UIViewController *child     = self;
    UIViewController *parent    = self.parentViewController;
    while (parent) {
        if (parent.modalViewController && parent.modalViewController == child) {
            self.isModal = YES;
            break;
        }
        child   = parent;
        parent  = parent.parentViewController;
    }

    if (self.isModal) {
        // modal additions, eg. Done button, navigationItem.prompt
    }
    else {
        // normal additions, eg. Now Playing button
    }
}

Есть ли способ сделать это, который не требует перехода вверх по дереву parentViewController или создания подклассов всех промежуточных контроллеров представления для передачи вниз состояние isModal при их инициализации?

9
задан Shaun Inman 4 December 2010 в 21:32
поделиться