Как я могу ответить на сенсорные события в UITextField? - PullRequest
18 голосов
/ 10 января 2012

Я хочу ответить на сенсорные события (в частности, UIControlEventTouchUpInside и UIControlEventTouchUpOutside) на UITextField, но единственное событие, которое проходит через это UIControlEventTouchCancel.

Я не могу использовать UIControlEventEditingDidBegin, потому что это происходит только тогда, когда поле получает фокус, что я не пытаюсь обнаружить. Я хочу знать, когда пользователь поднимает палец и находится ли он внутри или снаружи текстового поля, независимо от текущего состояния фокуса.

Кто-нибудь знает способ сделать это?

Чтобы было ясно, я пытался использовать addTarget:action:forControlEvents, и он не работает . Событие исправления предотвращается отменой. Я хочу, чтобы был обнаружен штрих до того, как UITextField потребит его и выдаст событие Cancel.

Кроме того, я хотел бы избежать создания дополнительных представлений, если это возможно.

Ответы [ 5 ]

4 голосов
/ 10 января 2012

Что ж, кругом пути для этого было бы создать UIButton с установленным для заполнения заполнением, чтобы охватить все пространство, и UITextField поверх него.Если пользователь касается текстового поля, текстовое поле должно отправить событие, а если пользователь касается вне текстового поля, UIButton отправит событие.

2 голосов
/ 08 сентября 2012

Хороший ответ здесь: Изменение событий касания по умолчанию для UITextField

Используйте делегат текстового поля и делайте то, что вы хотите сделать в textFieldShouldBeginEditing:

Вы можете вернуть NO, чтобы предотвратить поведение по умолчанию.

1 голос
/ 29 октября 2015

Вы можете создать категорию для UiView и переопределить мясной переход touchesBegan следующим образом.

Он работает нормально для меня. И это централизованное решение этой проблемы.

#import "UIView+Keyboard.h"
@implementation UIView(Keyboard)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.window endEditing:true];
    [super touchesBegan:touches withEvent:event];
}


@end
0 голосов
/ 08 сентября 2014

Я столкнулся с этой проблемой только сегодня.Моей целью было изменить цвет фона текстового поля при касании и вернуть его обратно при касании / отмене.Странно, что касание отправляется на цель из UITextField, но касание внутри, касание снаружи и даже отмена касания - нет.Я нашел решение.Это просто.Просто создайте подкласс UITextField и переопределите touchSended: и touchesCancelled:.

@interface TextField : UITextField

@end

@implementation CuteTextField

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesEnded:touches withEvent:event];
    self.backgroundColor=GetDefaultBackgroundColor();
}

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesCancelled:touches withEvent:event];
    self.backgroundColor=GetDefaultBackgroundColor();
}

@end
0 голосов
/ 10 января 2012

Добавьте цель для желаемого события программно или используйте IB.

UITextField * touchyTextField = [[UITextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 21.0)];

[touchyTextField addTarget:self 
                    action:@selector(yourDesiredMethod) 
          forControlEvents:UIControlEventTouchUpInside];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...