У мене NSTextView, який не можна редагувати,не вибір, у NSView. Мені потрібен NSView, щоб отримувати події клацання, коли натискається перегляд тексту. В основному мені потрібні події клацання, щоб діяти так, ніби перегляд тексту навіть не існує. Очевидно, я просто використовував би
textView:clickedOnCell:inRect:atIndex:
метод делегування тексту перегляду, але мені потрібно зафіксувати подію клацання, щоб виявити подвійне клацання і подібні речі.
Відповіді:
8 для відповіді № 1У вікні, що містить перегляд тексту, перемініть в hitTest:
метод повертати self
. Потім події миші будуть надіслані до подання контейнера.
Застереження
Я знайшов це hitTest:
буде викликано для подій відстеження клацання та миші де завгодно у вікні, навіть для подій, які, звичайно, не були б де-небудь біля подання контейнера. Якщо у вікні є інші види, hitTest:
метод перетворить вигляд контейнера в чорну діру, яка змушує всі ці події тяжіти до себе, ніколи не побачивши жодних інших поглядів.
Виправлення цього полягає в тому, щоб перевірити, чи подія знаходиться у вашому погляді, перш ніж проковтнути її. Якщо це так, поверніться self
; якщо це не так, поверніться nil
.
Найпростіший спосіб зробити це - зателефонувати super
реалізація, яка поверне погляд або будь-який підвид себе, якщо точка знаходиться в межах перегляду, а потім просто повернеться self
якщо цей метод повернув не-nil
. Якщо воно повернулося nil
, тоді ви повернетесь nil
теж.
Менш простим, але можливо більш ефективним методом було б перетворити крапку від віконної системи координат до перегляду, потім скористайтеся NSPointInRect
перевірити, чи точка знаходиться в межах перегляду "s bounds
.
2 для відповіді № 2
Просто для того, щоб поставити фантастичний опис Пітера в код:
- (NSView *)hitTest:(NSPoint)aPoint
{
NSView *result = [super hitTest:aPoint];
if (result)
{
result = self;
}
return result;
}