UitextField resignFirstResponder не работает в представлении прокрутки - PullRequest
1 голос
/ 23 февраля 2011

У меня есть 2 функции для resignFirstResponder, но ни одна из них не работает, когда текстовые поля в scrollview

мои функции:

-(BOOL)textFieldShouldReturn:(UITextField *)theTextField {

        if (theTextField == textField1) {
        [textField1 resignFirstResponder];
    }
    if (theTextField == textField2) {
        [textField2 resignFirstResponder];
    }
    if (theTextField == textField3) {
        [textField3 resignFirstResponder];
    }


    return YES;

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    [textField1 resignFirstResponder];
    [textField2 resignFirstResponder];
    [textField3 resignFirstResponder];

}

Я связал представление прокрутки в IB, я не могу выяснить, почему он не работает там, только когда я щелкаю за пределами scrollview. Поэтому он только отвечает на просмотр, но почему? Я думаю, что [[event allTouches] anyObject] отвечает на ALLtouches на ЛЮБЫХ объектах

Спасибо за помощь

Ответы [ 3 ]

2 голосов
/ 05 февраля 2013

Вы также можете использовать распознаватель жестов, чтобы получить фоновое нажатие. Используйте cancellsTouchesInView = NO для пересылки всех остальных касаний нужным получателям.

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTappedBackground:)];
tapGesture.cancelsTouchesInView = NO;
[self.scrollView addGestureRecognizer:tapGesture];
1 голос
/ 23 февраля 2011

Не было бы немного элегантнее добавить прозрачное представление, которое наследует UIControl с размером, равным вашему представлению с прокруткой, к его задней части, а затем просто создать IBAction для этого нового представления?

0 голосов
/ 09 мая 2015
@interface ScrollView <UIScrollViewDelegate,UITextFieldDelegate> {
    UITextField *_currentTF;
}

@implementation

- (void)viewDidLoad {
    yourScrollView.delegate = self;
    yourTextField.delegate = self;
}

#pragma mark UIScrollViewDelegate
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    [_currentTF resignFirstResponder];
}

#pragma mark UITextFieldDelegate
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    _currentTF = textField;
    return YES;
}
...