UISearchBar как часть клавиатуры? - PullRequest
1 голос
/ 10 ноября 2011

У меня есть UISearchBar на нижней панели инструментов.Проблема в том, что клавиатура закрывает его, когда вы нажимаете на него.Я пытался придумать способы обойти это.Я попытался добавить его в начало, но так как я использую UINavigationController, у меня неожиданное поведение.(Подобно тому, как UISearchBar в customView для rightBarButtonItem удлиняется, когда клавиатура появляется на экране, и не возвращается к исходному размеру, а вся навигационная панель исчезает с экрана при нажатии на клавиатуру, поэтому вы даже не видите, что набираетев такой ситуации тоже.)

Так что в качестве обходного пути я подумал, что у меня может быть systemIcon для поиска в правом нижнем углу панели инструментов, а затем, когда клавиатура выскочит, панель поиска может быть частьюклавиатуры, и тогда вы могли видеть, что вы печатаете.Кто-нибудь знает, как я это сделаю?Благодарю.

Ответы [ 3 ]

2 голосов
/ 10 ноября 2011

От Apple HIG для IOS:

Отображение строки поиска над списком или индексом в списке.Пользователи ожидают найти панель поиска в этой позиции, потому что они привыкли к панели поиска в Контактах и ​​других приложениях.Помещение панели поиска в это место означает, что она недоступна для пользователей, когда они прокручивают список или используют индекс, но удобно доступна, когда это необходимо.

Может показывать поискпанель внизу экрана не должна быть;)

Размещение UISearchbar вверху в пользовательском ViewController должно работать.Может поделитесь кодом?

1 голос
/ 10 ноября 2011

Бериллий на правильном пути.Вот некоторый код, который поможет вам туда добраться.

  1. Переместите панель поиска за пределы экрана, чтобы ее нельзя было увидеть, пока кнопка не будет нажата
  2. Регистрация для клавиатурыWillShow уведомлений
  3. когда кнопка нажата, сделайте панель поиска «становиться откликом»
  4. переместите панель поиска снизу (вне поля зрения) над клавиатурой (в поле зрения)

//

//in viewDidLoad register for notifications
 [self registerForKeyboardNotifications];

//in viewdidload hide the search bar
CGRect rect = searchBar.frame;
rect.origin.y = 480;
searchBar.frame = rect;

//own function register for keyboardwillshow
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}


//when button is pushed move the searchbar into view. you may have to play with the pixels a bit to make sure it lands on top, and flush

- (void)keyboardWillShow:(NSNotification*)aNotification
{

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
CGRect rect = searchBar.frame;
rect.origin.y = 180; //adjust the 180 to get it to land where you want
searchBar.frame = rect;
[UIView commitAnimations];
}


//own function hide the search bar when the keyboard is dismissed
- (void)keyboardWillHide:(NSNotification*)aNotification
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
CGRect rect = searchBar.frame;
rect.origin.y = 480;
searchBar.frame = rect;
[UIView commitAnimations];

}
0 голосов
/ 10 ноября 2011

Я видел несколько решений для этой задачи.Короче говоря, вы создаете UISearchBar / UIToolbar, добавляете наблюдателя для UIKeyboardWillShowNotification, и когда это уведомление срабатывает, только оживляет созданную вами UISearchBar / UIToolbar на 0,3 сек.Ссылки:

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