UITabBarController с UINavigationController, скрыть панель инструментов UINavigationController на hidesBottomBarWhenPressed, а не на панели вкладок UITabBarController - PullRequest
1 голос
/ 13 января 2012

У меня есть корневой контроллер вида 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).

Ответы [ 2 ]

3 голосов
/ 14 января 2012

когда вы нажимаете контроллер панели навигации, пишите код как

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 голосов
/ 13 января 2012

В методе UIViewController viewWillAppear выполните следующий вызов

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...