TabBar скрывается и не хочет возвращаться независимо от того, как я спрашиваю ... - PullRequest
3 голосов
/ 16 декабря 2011

Я застрял в проблеме, с которой многие люди сталкивались здесь раньше, но ее решения со временем видоизменяются, так как появляются новые версии iOS и меняются API. Ни одно из предыдущих решений не подходит для моей нынешней настройки - XCode 4.2.1, симулятор iPhone 5.0 или настоящий iPhone 5.0, приложение предназначено для iOS5 с использованием ARC и раскадровки.

У меня есть классическое приложение с вкладками -ie UITabBarController, в нем 4 вкладки ... игнорируем вкладки 2-4. Первая вкладка содержит UINavigationController, а его rootviewcontroller является UITableViewController. Теперь я помещаю 1 CustomUIViewController в стек.

Вся установка визуально разработана в раскадровке, толчок сделан последовательным.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    self.hidesBottomBarWhenPushed = YES;
}

Это эффективно скрывает панель вкладок точно так же, как приложение iPod в iPhone.

Но когда я вытаскиваю CustomUIViewController из стека, TabBar не возвращается. Я ставил

self.hidesBottomBarWhenPushed = NO;

во все возможные и невозможные места, но без удачи.

КАК мне вернуть TabBar обратно?

Ответы [ 4 ]

7 голосов
/ 03 января 2012

Это обобщенный ответ, чтобы предоставить будущим читателям четкое и понятное решение и точно сформулировать некоторые связанные проблемы.


Решением проблемы является следующий код>

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [segue.destinationViewController setHidesBottomBarWhenPushed:YES];
}

Проблема / путаница заключается в том, что в методе prepreareForSegue: можно установить свойство "hidesBottomBarWhenPush" в контроллере исходного представления (которое мы видим прямо сейчас) или в контроллере представления назначения (тот, который помещается в стек).Установив это в любом случае, вы получите первую половину решенной проблемы, т.е.Ваш TabBar становится скрытым.Вот почему «скрывающая» часть в моем прежнем коде работала, я устанавливал свойство в исходном viewcontroller.В моем коде

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    self.hidesBottomBarWhenPushed = YES;
}

здесь «self» указывает на контроллер представления источника, а не на контроллер представления представления.Таким образом, мы должны установить это в качестве конечного контроллера представления ...

Одна последняя проблема .. этот код с точечной нотацией не работает>

segue.destinationViewController.setHidesBottomBarWhenPushed = YES;

Вы должны вызывать метод setter следующим образом

[segue.destinationViewController setHidesBottomBarWhenPushed:YES];

Решение в точности соответствует спецификации Apple, в которой говорится, что «нижняя панель остается скрытой до тех пор, пока контроллер представления (со свойством hide установленным в YES) извлечен изстек. "

И последнее, не забудьте сузить настройку свойства hide до специфического перехода

-(void)prepareForSegue:(UIStoryboardSegue *)segue 
                sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"SegueIdentifier"]) 
    {
        [segue.destinationViewController setHidesBottomBarWhenPushed:YES];
    }
}

Я делю вознаграждение для двух пользователей (Щедрость достается Эшу Ферроу, принявшему решение Эрику Ларсону, это самое близкое, что я смог прийти после прочтения правил о вознаграждениях и акцептах), которые оба помогли мне решить эту проблему + небольшой комментарий, почему в своих уважаемых темах.

5 голосов
/ 19 декабря 2011

Я думаю, вам нужно установить

segue.destinationViewController.hidesBottomBarWhenPushed = YES;

вместо self.hides ....

4 голосов
/ 02 января 2012

Согласно Apple , «нижняя панель остается скрытой до тех пор, пока контроллер представления не выскочит из стека». Невозможно «отобразить» нижнюю панель, если вы не откроете контроллер представления выше в иерархии навигации.

Вам придется придумать другой обходной путь, который не включает свойство hidesBottomBarWhenPhed. Есть хорошее описание того, как этого добиться, в другом вопросе SO .

1 голос
/ 31 марта 2012

Просто положите [segue.destinationViewController setHidesBottomBarWhenPushed:YES]; в prepareForSegue.

У меня отлично работает.

...