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