В представлении, содержащем текстовое представление, переопределите метод hitTest:
для возврата self
. События мыши будут отправлены в представление контейнера.
Протест
С тех пор я обнаружил, что hitTest:
будет вызываться для событий щелчка и отслеживания мыши в любом месте в окне, даже для событий, которые, естественно, не будут находиться рядом с представлением контейнера. Если в окне есть другие виды, ваш метод hitTest:
превратит вид контейнера в черную дыру, которая заставляет все эти события притягиваться к себе, никогда не видя другие виды.
Исправление для этого заключается в проверке того, находится ли событие в вашем поле зрения, прежде чем его проглотить. Если это так, верните self
; если это не так, верните nil
.
Самый простой способ сделать это - вызвать реализацию super
, которая вернет представление или любое подпредставление самого себя, если точка находится в представлении, а затем просто вернет self
, если этот метод возвратил не- nil
. Если он вернул nil
, то вы также вернете nil
.
Менее простой, но, возможно, более эффективный метод: преобразовать точку из системы координат окна в вид, а затем используйте NSPointInRect
, чтобы проверить, находится ли точка в пределах bounds
вида. .