У меня есть корневой контроллер вида UITabBarController
с тремя контроллерами представления, один из которых - UINavigationController
с UIViewController
, содержащий UISearchDisplayController
и UITableView
.Панель инструментов UINavigationController
не скрыта.
Однако, когда я выбираю строку в UITableView
, я хотел бы нажать еще одну UIViewController
.Когда эта UIViewController
нажата, панель инструментов UINavigationController
должна выдвинуться, а панель вкладок UITabBarController
должна остаться видимой.
Я попытался установить для свойства hidesBottomBarWhenPhed толкаемой UIViewController
значение true (что обеспечиваетпредполагаемое поведение, когда UINavigationController
не вложено в UITabBarController
).К сожалению, вместо того, чтобы выдвигать панель инструментов UINavigationController
, когда для hidesBottomBarWhenPressed установлено значение true, UITabBarController
выдвигается, оставляя UINavigationController
видимым в толкаемом UIViewController
в качестве нижней панели.
Как можетвыдвигать панель инструментов UINavigationController
при нажатии, а не панель вкладок UITabBarController
?
EDIT # 1 : Единственное возможное решение, о котором я могу подумать, это вместо использования *Панель инструментов 1031 *, просто добавьте UIToolbar
в конец представления UIViewController
, содержащего UITableView
.Это гарантирует, что UIToolbar
выдвигается, когда новый UIViewController
выдвигается, и скользит, когда новый UIViewController
выдвигается.Единственная проблема заключается в том, что для iPhone и iPod Touch, в отличие от панели инструментов UINavigationController
, высота экземпляра UIToolbar
(44 пикселя) не будет уменьшаться до 30+ пикселей в высоту (как это делает панель инструментов UINavigationController
), когдаустройство повернуто в горизонтальную ориентацию.Если это единственное законное решение, как я могу изменить высоту UIToolbar
, чтобы она соответствовала высоте панели инструментов UINavigationController
в альбомной ориентации?
EDIT # 2 : Относительно редактирования# 1, я полагаю, что кадр UIToolbar
можно изменить с помощью метода willRotateToInterfaceOrientation
.Я все же хотел бы найти решение для выдвижения панели инструментов UINavigationController
.Лучше, чем создавать отдельные UIToolbar
для каждого UIViewController
. Я бы хотел иметь нижнюю панель инструментов.
EDIT # 3 : В основном, вот что у меня есть (это результат hidesBottomBarWhenPhed): http://flic.kr/p/bcjydn
И вот что я хотел бы достичь: http://flic.kr/p/bcjybK
РЕДАКТИРОВАТЬ # 4 : Во-первых, спасибо за ваше время.Во-вторых, к сожалению, метод setToolbarHidden: animated: в UINavigationController не может создать слайд / слайд в анимации, как это видно с помощью setHidesBottomBarWhenPhed: (см. Ссылки в 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 из родительского контроллера представления, дочерний контроллер представления viewWillAppear: method будетназывается.Это просто скроет панель инструментов UINavigationController (до запуска анимации push), открывая часть UIWindow, которая находится под панелью инструментов UINavigationController.Остальная часть push-анимации выполняется должным образом (панель инструментов UINavigationController все еще не видна в дочернем контроллере представления, все изменяется соответствующим образом).Затем, когда мы извлекаем дочерний контроллер представления, будет вызываться viewWillAppear: метод для parentViewController, который будет показывать панель инструментов UINavigationController (делая панель инструментов видимой в дочернем контроллере представления), затем будет выполняться анимация всплывающих окон.Остальная часть поп-анимации выполняется должным образом (панель инструментов UINavigationController все еще видна в родительском контроллере представления, все размеры соответствующим образом изменены).
В некотором роде предполагалось, что этот вопрос приведет к провалу.Единственные оставшиеся у меня идеи:
1) РЕДАКТИРОВАТЬ # 1 (хотя эта реализация ограничена невозможностью надлежащим или законным образом изменить высоту стандартного экземпляра UIToolbar, iPod Touch или iPhone, в горизонтальной ориентации; одна из причин, по которой я преисполнен решимостипри использовании панели инструментов UINavigationController).
2) Либо подкласс UITabBar, либо UITabBarController, чтобы попытаться не допустить, чтобы setHidesBottomBarWhenPressed: метод понял, что панель вкладок UITabBarController является нижней панелью.По сути, обходите панель вкладок и вместо этого проходите панель инструментов UINavigationController.Вероятно, самая многообещающая идея, но потенциально самая трудная (поскольку знание setHidesBottomBarWhenPush: innards ограничено, и поскольку могут потребоваться частные API).