2012-01-13 3 views
1

У меня есть контроллер представления UITabBarController корня с тремя контроллерами зрения, один раз из которых является UINavigationController с UIViewController, содержащим UISearchDisplayController и UITableView. Панель инструментов UINavigationController не скрыта.UITabBarController с UINavigationController, скрыть панель инструментов UINavigationController на hidesBottomBarWhenPushed, не UITabBarController панель вкладок

Однако, когда я выбираю строку в UITableView, я хотел бы нажать еще UIViewController. Когда этот UIViewController нажат, панель инструментов UINavigationController должна выдвигаться, а панель вкладок UITabBarController должна оставаться видимой.

Я попытался установить hidesBottomBarWhenPushed свойства толкаемого UIViewController истинные (что обеспечивает предполагаемое поведение, когда UINavigationController не вложен в UITabBarController). К сожалению, скорее, скользящая панель инструментов UINavigationController, когда hidesBottomBarWhenPushed установлена ​​в true, UITabBarController выставляет слайды, оставляя UINavigationController видимым в нажатом UIViewController в качестве нижней панели.

Как можно выдвинуть панель инструментов UINavigationController при нажатии, а не на панели ввода UITabBarController?

EDIT # 1: Единственное возможное решение, которое я могу думать о том, а не с помощью панели инструментов UINavigationController, просто добавьте UIToolbar в нижней части UIViewController зрения, содержащей UITableView. Это гарантирует, что UIToolbar выйдет, когда новый UIViewController будет нажат и сдвинется, когда появится новый UIViewController. Единственная проблема заключается в том, что для iPhone и iPod Touch, в отличие от панели инструментов UINavigationController, высота экземпляра UIToolbar (44 пикселя) не будет уменьшаться до высоты 30 пикселей (например, панель инструментов UINavigationController), когда устройство повернуто на ландшафтная ориентация. Если это единственное законное решение, как я могу изменить высоту UIToolbar в соответствии с высотой панели инструментов UINavigationController?

РЕДАКТИРОВАТЬ # 2: Что касается EDIT # 1, я полагаю, что рама UIToolbar может быть изменен в методе willRotateToInterfaceOrientation. Я все равно хотел бы найти решение для разворачивания панели инструментов UINavigationController. Лучше, чем создание отдельного UIToolbar за каждые UIViewController Желаю иметь нижнюю панель инструментов.

EDIT # 3: В принципе, вот что у меня есть (это результат hidesBottomBarWhenPushed): http://flic.kr/p/bcjydn

И вот что я хотел бы достичь: http://flic.kr/p/bcjybK

EDIT # 4: Во-первых, спасибо за ваше время. Во-вторых, к сожалению, метод setToolbarHidden: анимированный: в UINavigationController не может создать анимацию слайдов/слайдов, как показано в файле setHidesBottomBarWhenPushed: (см. Ссылки в EDIT # 3, в частности вторую ссылку, для нужной анимации) ,Например, предположим, что мы пишем:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [self.navigationController setToolbarHidden:NO animated:NO]; 
    [super viewWillAppear:animated]; 
} 

в контроллере родительского вида (контроллер вид, в котором панель не скрыта), и предположим, что мы пишем:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [self.navigationController setToolbarHidden:YES animated:NO]; 
    [super viewWillAppear:animated]; 
} 

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

Как только мы нажмем контроллер дочернего представления на стек UINavigationController из родительского контроллера представления, будет вызван метод view viewWillAppear: Это просто скроет панель инструментов UINavigationController (до начала анимации push), обнажая часть UIWindow, которая находится под панелью инструментов UINavigationController. Остальная часть анимации push выполняется так, как ожидалось (панель инструментов UINavigationController все еще не видна в контроллере дочернего представления, все соответствующим образом изменяются). Затем, когда мы выберем контроллер дочернего представления, метод viewWillAppear: будет вызываться для parentViewController, который отобразит панель инструментов UINavigationController (сделав панель инструментов видимой в контроллере дочернего представления), тогда будет выполняться поп-анимация. Остальная часть поп-анимации выполняется, как ожидалось (панель инструментов UINavigationController все еще видна в контроллере родительского представления, все соответствующим образом изменено).

Вид фигурировал, что этот вопрос должен был сбить ратушу. Единственные оставшиеся идеи у меня есть следующие:

1) EDIT # 1 (хотя, что реализация ограничена невозможностью надлежащим образом или юридически изменить высоту стандартного экземпляра UIToolbar IPod Touch или iPhone находится в ландшафте; один причина, почему я чертовски использую панель инструментов UINavigationController).

2) Любой подкласс UITabBar или UITabBarController пытается предотвратить метод setHidesBottomBarWhenPushed: понять, что панель вкладок UITabBarController является нижней панелью. В принципе, обходите панель вкладок и переходите к панели инструментов UINavigationController. Вероятно, это самая многообещающая идея, но, возможно, самая сложная задача (поскольку знание setHidesBottomBarWhenPushed: innards ограничено, и поскольку для этого могут потребоваться частные API).

+0

, что вы хотите, чтобы скрыть или показать, что вы в следующем экране? если возможно показать код – Hiren

+0

Я добавил EDIT # 3 на мое сообщение. Это даст вам представление о том, что у меня есть прямо сейчас (используя настройку hidesBottomBarWhenPushed для YES для UIViewController, с которой я сверляю). И это даст вам представление о том, чего я хотел бы достичь. Я начинаю думать, что EDIT # 1 может быть самым простым решением. Но это тоже самое простое решение. Не говоря уже о том, чтобы изменить высоту экземпляра UIToolbar (например, панель инструментов UINavigationController), вам нужно установить autoResizingMask или фрейм для панели инструментов, обе из которых, по-видимому, не предлагаются HIG. –

ответ

0

В методе ваших UIViewController «S viewWillAppear сделать следующий вызов

[self.navigationController setToolbarHidden:YES animated:NO]; 

Это бар относятся к UINavigationController. Хотя я никогда не использовал hidesBottomBarWhenPushed, похоже, что он подходит для самой нижней панели, которую он может найти.

+0

Спасибо, Винсберн. Я забыл упомянуть, я тоже это пробовал. Очевидно, это позволяет скрыть и отобразить панель инструментов UINavigationController. Это хорошо.Единственная проблема: при скрытии, вместо того, чтобы выдвигаться с помощью UIViewController с UITableView, он остается видимым, пока не будет нажат UIViewController, а затем сдвинется вниз. Сдвигается вверх, вместо того, чтобы скользить вместо этого, когда выскакивает назад. –

+0

@NicholasPeters передают его 'animated: NO', и у вас будет то, что вы хотите –

+0

Hi VinceBurn. Вы предоставили аналогичное решение для hiren443, поэтому я ответил на ** EDIT # 4 ** выше. –

3

когда вы нажимаете навигационный контроллер бара написать код, как

YourController = [[YourController alloc] initWithNibName:@"YourController" bundle:nil] 
controller.hidesBottomBarWhenPushed = TRUE; 
[self.navigatoinController pushViewController:controller Animated:YES]; 

//// Try this code where you want to hide navigation bar 

-(void)viewWillAppear{ 
    self.navigationController.navigationBarHidden = TRUE; 
} 
+0

спасибо hiren443. В точку. Это то, что у меня есть. И, по определению, я полагаю, что это работает. Он скрывает нижнюю панель (в этом случае панель вкладок UITabBarController). К сожалению, я не хочу скрывать панель вкладок, я хочу скрыть панель инструментов UINavigationController (вторая панель снизу). Этот код, как есть, приводит к первому изображению в EDIT # 3. Я хотел бы получить второе изображение в EDIT # 3. –

+0

проверить обновленный ответ – Hiren

+0

Hi hiren443. Вы предоставили аналогичное решение для VinceBurn, поэтому я ответил на ** EDIT # 4 ** выше. –

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