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