Скрыть панель инструментов при использовании панели поиска пользовательского интерфейса

#iphone #uitableview #uisearchbar #uitoolbar #modal-view

#iPhone #uitableview #панель поиска пользовательского интерфейса #панель инструментов пользовательского интерфейса #модальный вид

Вопрос:

Здравствуйте, в настоящее время я сталкиваюсь с проблемой, когда пытаюсь скрыть панель инструментов с помощью панели поиска.

У меня есть модальное представление с UIToolbar, UISearchBar (и его контроллером) и UITableView. Я использую UIToolbar, потому что это представление фактически отображается как модальное представление. Я предполагаю, что то, что я пытаюсь сделать, было бы немного проще в контексте UINavigationController.

При поиске я хочу скрыть панель инструментов. Для этого я использую уведомления для изменения структуры моих компонентов при появлении клавиатуры. Но у меня проблема, под моей панелью поиска есть выделенное пространство. Вы можете увидеть скриншот :

http://dl.dropbox.com/u/39339665/Capture d’écran 2011-10-19 à 16.21.43.png

Я использую NSNotifcationCenter, чтобы получать уведомления, когда клавиатура будет скрыта / показана:

 - (void)viewDidLoad {
[super viewDidLoad];
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
  

Вот мой обратный вызов:

 - (void)keyboardWillHide:(NSNotification *)notification
{
  [UIView beginAnimations:nil context:nil];
  CGRect toolbarFrame = self.toolBar.frame;
  toolbarFrame.origin.y  = toolbarFrame.size.height;

  CGRect tableViewFrame = self.theTableView.frame;
  tableViewFrame.origin.y  = toolbarFrame.size.height;
  tableViewFrame.size.height -= toolbarFrame.size.height;

  self.toolBar.frame = toolbarFrame;
  self.theTableView.frame = tableViewFrame;  
  [UIView commitAnimations];
}

- (void)keyboardWillShow:(NSNotification *)notification
{
  [UIView beginAnimations:nil context:nil];
  CGRect toolbarFrame = self.toolBar.frame;
  toolbarFrame.origin.y -= toolbarFrame.size.height;

  CGRect tableViewFrame = self.theTableView.frame;
  tableViewFrame.origin.y -= toolbarFrame.size.height;
  tableViewFrame.size.height  = toolbarFrame.size.height;

  self.toolBar.frame = toolbarFrame;
  self.theTableView.frame = tableViewFrame;
  [UIView commitAnimations];
}
  

Ответ №1:

Вы можете скрыть ее в нужное время с помощью:

 toolbar.hidden = YES;
  

Комментарии:

1. Если я использую это, у меня просто будет пробел в верхней части представления. Мне нужно переместить панель поиска в верхней части представления. Я знаю, что это легко сделать с помощью NavigationController (используя -(void)sethidden:YES animated: YES), но я пытаюсь сделать это с помощью UIToolbar

2. Вы всегда можете рассмотреть возможность использования анимации для изменения размера вашего представления, чтобы заполнить пробел?

3. Да, это то, что я пытаюсь сделать. Но, как вы можете видеть на скриншоте, у меня проблема с «выделенным» пробелом

4. Я не вижу скриншот — он говорит, что у меня нет доступа. Тем не менее, я думаю, вам нужно переместить панель инструментов из вида. Если вы помните, верхний левый угол — это позиция (0,0). Поэтому, если вы выполняете анимацию, чтобы установить координату y панели инструментов равной — (высота панели инструментов), когда вы хотите, чтобы она была за кадром, и (0,0), когда вы хотите, чтобы она была на экране. Что касается tableview, вы должны иметь возможность размещать его в (0,0), когда панель инструментов находится за пределами экрана, и в положении (высота панели инструментов, 0), когда панель инструментов находится на экране.

5. Хорошо, мне очень жаль, я редактирую свой предыдущий вопрос с правильной общедоступной ссылкой! Я думаю, что вы лучше поймете мою проблему с этой картинкой! На самом деле я делаю именно то, что вы говорите в своих обратных вызовах (возможно, с ошибкой? но я действительно не нахожу его …)

Ответ №2:

почему бы просто не использовать

 toolbar.hidden = TRUE;