Работа со встроенными UIButtons

#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. спасибо за описание того, что мне пришлось выбрать пользовательский стиль кнопок, я уже знал это, но я думаю, что это может быть полезно другим.