2011-12-16 3 views
3

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

У меня есть классические вкладки приложения -ie UITabBarController, в нем 4 вкладке ... игнорировать 2 до 4 вкладки .. Первой закладки проходит UINavigationController с его RootViewController быть UITableViewController. Теперь я выталкиваю 1 CustomUIViewController в стек.

Вся установка визуально разработана в раскадровке, нажим осуществляется с помощью segue.

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

Это эффективно скрывает табуляцию точно так же, как приложение iPod в iPhone.

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

self.hidesBottomBarWhenPushed = NO; 

на все возможные и невозможные места, но не повезло.

КАК я могу вернуть свой TabBar?

ответ

4

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

segue.destinationViewController.hidesBottomBarWhenPushed = YES; 

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

+0

Не установлен ли этот флажок для этого в инспекторе контроллера просмотра в раскадровке? –

+0

Это действительно так. – agilityvision

+0

Я даже не могу его скомпилировать .. он говорит - Свойство «hidesBottomBarWhenPushed» не найдено на объекте типа «id». –

3

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

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

+1

После того, как я почти потерял надежду, ваш комментарий заставил меня проверить, где на самом деле указывает «я», и понимаю, что я не могу выставить контроллер источника и, таким образом, снова попробовать решение от Eric Lars0n. –

7

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


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

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

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

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

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

Последний выпуск ..этот код с точечной нотации не работает>

segue.destinationViewController.setHidesBottomBarWhenPushed = YES; 

Вы мут вызвать метод установки, как этот

[segue.destinationViewController setHidesBottomBarWhenPushed:YES]; 

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

Последняя вещь, не забудьте сузить значение свойства скрыть в speficic Segue

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

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

+0

Можете ли вы немного рассказать о том, почему нотация точек здесь не работает? –

+0

Это может быть ошибка, к сожалению, я не знаю. –

1

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

Для меня хорошо работает.

Смежные вопросы