#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;