#iphone #objective-c #cocoa-touch #uibutton #touch-event
#iPhone #objective-c #cocoa-touch #uibutton #касание-событие
Вопрос:
Эй, ребята, итак, у меня есть эта панель поиска в моем представлении вместе со многими кнопками под ней. Итак, при нажатии на панель поиска появляется клавиатура, однако я хочу, чтобы пользователь мог щелкнуть в любом месте под панелью поиска и над клавиатурой, чтобы выйти из режима поиска. Я немного порылся в SO и наткнулся на решение, в котором предлагалось создать невидимую кнопку, которая перехватывает события касания, которые я могу использовать для отмены статуса первого ответчика в строке поиска. И я могу просто скрыть / отключить кнопку, когда она мне не нужна, чтобы кнопки под ней можно было нажимать правильно? Неправильно. setHidden
ни setEnabled:
не справляются с задачей. Вот соответствующий код:
//touch event on button outsideSearchBarButton which is invisible
- (IBAction)selectOutsideSearchBar:(id)sender {
NSLog(@"Selected outside search bar");
[searchBar resignFirstResponder];
[outsideSearchBarButton setEnabled:NO];
[outsideSearchBarButton setHidden:YES];
}
- (void)searchBarTextDidBeginEditing:(UISearchBar *)aSearchBar {
NSLog(@"searchbarTextDidBeginEditing");
[outsideSearchBarButton setHidden:NO];
[outsideSearchBarButton setEnabled:YES];
}
Установка кнопки в положение отключено или скрыто с помощью файла nib мне вообще не помогает. кнопка либо никогда не существует (я не могу щелкнуть между панелью поиска и клавиатурой, и клавиатура исчезнет), либо существует всегда (я не могу нажать ни на одну из кнопок под этой невидимой кнопкой). Любая помощь приветствуется. Заранее спасибо!
Ответ №1:
//touch event on button outsideSearchBarButton which is invisible
- (IBAction)selectOutsideSearchBar:(id)sender {
NSLog(@"Selected outside search bar");
[searchBar resignFirstResponder];
outsideSearchBarButton.userInteractionEnabled = NO;
}
- (void)searchBarTextDidBeginEditing:(UISearchBar *)aSearchBar {
NSLog(@"searchbarTextDidBeginEditing");
outsideSearchBarButton.userInteractionEnabled = YES;
}
Сделайте это.
Комментарии:
1. Да, это помогло, видимо, мой старый код тоже работал… Я понял, что по глупости не подключил свою невидимую кнопку к переменной IBOutlet OUTSIDE, поэтому код, который изменял кнопку, ничего не делал. Итак, мой старый код действительно работал, однако я чувствую, что это гораздо более элегантное решение, вот почему я отмечаю это как ответ.
Ответ №2:
перейдите в конструктор интерфейса и выберите кнопку, с помощью которой вы удаляете клавиатуру во время поиска, затем выберите layout в меню выше и выберите отправить обратно.Затем в окне инспектора установите стиль кнопки на пользовательский.
Надеюсь, это поможет вам…….
Комментарии:
1. спасибо за описание того, что мне пришлось выбрать пользовательский стиль кнопок, я уже знал это, но я думаю, что это может быть полезно другим.