Iphone Textview не вызывает TouchesBegan - PullRequest
3 голосов
/ 16 ноября 2010

У меня есть текстовое поле, которое скрывает клавиатуру, когда я касаюсь чего-то еще на экране (через функцию TouchesBegan и ухожу в отставку ... бла). Но когда я касаюсь Textview, TouchesBegan не вызывается и клавиатура не скрывается! Есть ли способ вызвать TouchesBegan, чтобы скрыть клавиатуру?

Ответы [ 3 ]

2 голосов
/ 22 ноября 2010

Существует также простой способ скрыть клавиатуру на touchesBegan: когда вы используете UITextView для ввода данных.

Шаг 1. Убедитесь, что вы расширили Textviewdelegate при объявлении класса.1004 *

@ interface YourClassName: UIViewController {IBOutlet UITextView * txtMyView;}

шаг 2. установить делегата на самообзор, загрузил функцию.

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

шаг 3. напишите код similer в функции touchesbegan с именем textView.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
            [txtMyView resignFirstResponder];
        [super touchesBegan:touches withEvent:event];

}

Спасибо и всего наилучшего.

2 голосов
/ 14 августа 2013

Я предполагаю, что ваш UITextView недоступен для редактирования, так как вы не хотите, чтобы клавиатура всплывала при прикосновении к нему, поэтому убедитесь, что в свойствах View для вашего UITextView не установлено значение «User Interaction Enabled».Вы также можете записать это в свой ViewController следующим образом:

textView.userInteractionEnabled = NO;

Это позволит пользовательским событиям проходить к суперпредставлению, и будут вызываться touchesBegan и другие методы делегата.

2 голосов
/ 17 ноября 2010

Лучший метод, который я видел для этого, - это добавить прозрачное подпредставление, которое накладывается на текстовое представление и обрабатывает сначала TouchesBegan.Затем вы можете обнаружить прикосновения за пределами текстового поля и отклонить клавиатуру, оставив текстовое поле в качестве первого респондента.

Например, создайте вложенное подпредставление в IB или программно, в любом случае.Разместите и измерьте его так, чтобы он покрывал текстовые представления, и придавайте ему ясный цвет.Если вы добавляете вид через IB, скрывайте его, когда ваш основной вид загружается, чтобы он еще не поглощал прикосновения, например так:

- (void)viewDidLoad
{
    [super viewDidLoad];
    overView.hidden = YES;
}

Затем, когда текстовое поле начинает редактирование, раскройте вид:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    overView.hidden = NO;
}

Когда текстовое поле завершает редактирование, снова откройте вид:

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    overView.hidden = YES;
}

Добавьте touchchesBegan, чтобы обнаруживать прикосновение к скрытому overView:

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

    // Resign first responder if touch is outside text field
    if ([touch view] != myTextField)
        [myTextField resignFirstResponder];

    // Send touches up the responder chain (pass them through)
    [self.nextResponder touchesBegan:touches withEvent:event];
}

Вы также можете сделать это с помощью пользовательских жестов, но это работает только с iOS 4.x и, на мой взгляд, более сложно.

...