(iPhone) How для обработки касаний к UITextView?

OK, LocalStorage, поскольку он называется локальным хранилищем для ваших браузеров, он может сэкономить до 10 МБ, SessionStorage делает то же самое, но, как его называют, он основан на сеансе и будет удален после закрытия браузера, а также может сэкономить меньше чем LocalStorage, например до 5 МБ, но Cookies - это очень крошечные данные, хранящиеся в вашем браузере, которые могут сэкономить 4 КБ и могут быть доступны через сервер или браузер как ...

Я также создал изображение ниже, чтобы показать различия с одного взгляда:

24
задан devguy 5 March 2009 в 20:08
поделиться

3 ответа

Необходимо присвоить UITextView instance.delegate = сам (предположение, что Вы хотите заботиться о событиях в том же контроллере)

, И удостоверьтесь, что реализовали протокол UITextViewDelegate в интерфейсе... исключая:

@interface myController : UIViewController <UITextViewDelegate>{
}

Тогда можно реализовать любой из следующих


- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;
- (BOOL)textViewShouldEndEditing:(UITextView *)textView;

- (void)textViewDidBeginEditing:(UITextView *)textView;
- (void)textViewDidEndEditing:(UITextView *)textView;

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
- (void)textViewDidChange:(UITextView *)textView;

- (void)textViewDidChangeSelection:(UITextView *)textView;

2
ответ дан dizy 28 November 2019 в 23:52
поделиться

UITextView (подкласс UIScrollView) включает в себя много обработки событий. Он обрабатывает копирование и вставку и детекторы данных. Тем не менее, вероятно, это ошибка, которая не передает необработанные события.

Существует простое решение: вы можете создать подкласс UITextView и реализовать свои собственные touchesEnded (и другие сообщения обработки событий) в своих собственных версиях, вы должны вызвать [super touchesBegan: touches withEvent: event]; внутри каждый метод обработки касаний.

#import "MyTextView.h"  //MyTextView:UITextView
@implementation MyTextView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"touchesBegan");
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
        [super touchesBegan:touches withEvent:event];
    NSLog(@"touchesMoved");
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"****touchesEnded");
    [self.nextResponder touchesEnded: touches withEvent:event]; 
    NSLog(@"****touchesEnded");
    [super touchesEnded:touches withEvent:event];
    NSLog(@"****touchesEnded");
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
[super touches... etc]; 
NSLog(@"touchesCancelled");
}
14
ответ дан 28 November 2019 в 23:52
поделиться

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

Конечно, я столкнулся с проблемой, что текстовое представление поглощает штрихи, которые начинаются на нем. Отключение взаимодействия с пользователем исправит это, но тогда пользователь не сможет прокручивать текстовое представление.

Мое решение состояло в том, чтобы сделать текстовое представление редактируемым и использовать метод делегата textview shouldBeginEditing для обнаружения касания в текстовом представлении. Я просто возвращаю НЕТ, тем самым предотвращая редактирование, но теперь я знаю, что текстовое представление (и, следовательно, суперпредставление) было использовано. Между этим методом и методом touchesEnded супервизора у меня есть то, что мне нужно.

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

1
ответ дан 28 November 2019 в 23:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: