OK, LocalStorage, поскольку он называется локальным хранилищем для ваших браузеров, он может сэкономить до 10 МБ, SessionStorage делает то же самое, но, как его называют, он основан на сеансе и будет удален после закрытия браузера, а также может сэкономить меньше чем LocalStorage, например до 5 МБ, но Cookies - это очень крошечные данные, хранящиеся в вашем браузере, которые могут сэкономить 4 КБ и могут быть доступны через сервер или браузер как ...
Я также создал изображение ниже, чтобы показать различия с одного взгляда:
Необходимо присвоить 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;
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");
}
Я использую текстовое представление в качестве подвида большего представления. Мне нужно, чтобы пользователь мог прокручивать текстовое представление, но не редактировать его. Я хочу обнаружить одно нажатие на супервизоре текстового представления, в том числе на самом текстовом представлении.
Конечно, я столкнулся с проблемой, что текстовое представление поглощает штрихи, которые начинаются на нем. Отключение взаимодействия с пользователем исправит это, но тогда пользователь не сможет прокручивать текстовое представление.
Мое решение состояло в том, чтобы сделать текстовое представление редактируемым и использовать метод делегата textview shouldBeginEditing для обнаружения касания в текстовом представлении. Я просто возвращаю НЕТ, тем самым предотвращая редактирование, но теперь я знаю, что текстовое представление (и, следовательно, суперпредставление) было использовано. Между этим методом и методом touchesEnded супервизора у меня есть то, что мне нужно.
Я знаю, что это не сработает для людей, которые хотят получить доступ к фактическим прикосновениям, но если все, что вы хотите сделать, это обнаружить касание, этот подход работает!