По-прежнему ли выбирается UIButton, когда UITextField является первым ответчиком?

#iphone #ios #xcode

#iPhone #iOS #xcode

Вопрос:

Я пытаюсь выяснить, как сделать что-то, возможно, немного нестандартное. У меня есть контроллер представления (UIViewController), который имеет 1 UITextField и 3 UIButtons. Я использую UIButtons в основном как переключатели; одновременно можно выбрать только 1. Итак, у каждого есть:

 [myButton1 addTarget:self action:@selector(buttonPushed:)
    forControlEvents:UIControlEventTouchUpInside];
  

И я делаю это для переключения между кнопками:

 - (void) buttonPushed:(id)sender
{
    myButton1.selected = NO;
    myButton2.selected = NO;
    myButton3.selected = NO;
    if (sender == myButton1) {
        myButton1.selected = YES;
    }
    else if (sender == myButton2) {
        myButton2.selected = YES;
    }
    else if (sender == myButton3) {
        myButton3.selected = YES;
    }
}
  

Теперь дело в том, что я все еще хочу, чтобы кнопки можно было выбирать, даже если клавиатура текстового поля включена (кнопки и текстовое поле видны при отображении клавиатуры). Но поскольку текстовое поле имеет первого ответчика, касания кнопки не распознаются (никогда не достигает целевого метода buttonPushed). Я не хочу, чтобы пользователю приходилось отключать клавиатуру только для выбора кнопки.
Как я могу это сделать? Спасибо!

Ответ №1:

Я понял это. 2 ответа здесь были правильными; проблема в том, что я использовал UITapGestureRecognizer в этом представлении. По какой-то причине это препятствовало достижению любых событий касания, кроме предопределенных нажатий, я полагаю. Doh.

Я удалил распознаватель жестов, и теперь события касания отображаются при отображении клавиатуры.

Ответ №2:

У меня не было проблем с получением событий от кнопок с поднятой клавиатурой. Вы уверены, что вообще не обращаетесь к этому обработчику?

Есть ли вероятность, что myButton1 и т.д. Не подключены?

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

1. Я не использую Interface Builder. Я просто добавляю кнопки в представление после того, как задаю их свойства. Метод buttonPushed достигается, когда клавиатура не включена, но когда клавиатура включена, он вообще не достигает ее.

2. Правильно ли я добавляю кнопку в представление? Или я должен сделать что-то еще? Если я добавлю метод «touchesEnded», он срабатывает, когда я нажимаю в любом другом месте экрана, кроме UIButtons. И когда клавиатура включена, она не попадает в метод touchesEnded, если я вообще нажимаю где-либо.

Ответ №3:

я думаю, вам следует использовать сенсорные методы, такие как

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
or
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
  

я предпочитаю, чтобы вы использовали метод touchEnded. здесь вы проверяете, нажимает ли пользователь на uibutton, а затем делаете то, что вы хотите

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

1. Спасибо за это. Хотя кажется, что эти сенсорные методы не работают для UIButton. Я думаю, я могу просто подклассировать UIButton и перейти оттуда к перехвату сенсорных методов. Не уверен, что это решение, но я начну с этого.