2012-01-13 6 views
5

Đây là ý tưởng:Làm cách nào để chặn sự kiện NSView dưới một NSView khác?

Tôi có NSWindow chứa 2 NSView, hãy gọi chúng là ViewA và ViewB.

Chế độ xemA có danh sách các đối tượng trong chế độ xem phụ, mỗi đối tượng có vùng theo dõi riêng được đặt và xử lý sự kiện mouseDown. ViewB là chế độ xem ẩn, xuất hiện trên ViewA.

Vấn đề là khi ViewB xuất hiện, ViewA vẫn nhận được sự kiện mouseDown. Vì vậy, khi tôi nhấp vào ViewB, đối tượng phía sau ViewB nhận được sự kiện mouseDown. Tôi muốn biết nếu có bất kỳ cách nào để chặn các sự kiện của ViewA trong khi ViewB là hơn nó.

Tôi biết tôi có thể xóa khu vực theo dõi khỏi mọi đối tượng nhưng vẫn phản hồi sự kiện mouseDown.

Trả lời

-5

bạn cũng có thể tắt các sự kiện chạm cho ViewA theo [ViewA setAcceptsTouchEvents:NO]; và có thể bật lại theo yêu cầu của bạn bằng cách đặt lại YES.

+0

Tôi tin rằng chỉ ảnh hưởng đến các sự kiện * chạm * (ví dụ: cử chỉ cụ thể của bàn di chuột). Tôi mong đợi các sự kiện chuột và bàn phím tiếp tục hoạt động với bộ đó thành KHÔNG. – ipmcc

0

Nếu chế độ xem B là chế độ xem con của A, vấn đề là nó bị ẩn. Đừng giấu nó: chỉ cần thiết lập Opacity của nó là 0. Bằng cách đó bạn sẽ không nhìn thấy nó, nhưng chuỗi trả lời sẽ.

+0

ViewB cũng là một tiểu sử của NSWindow. Nhưng tôi sẽ thử điều này. Cảm ơn! – QyoDeveloper

1

Bạn có thể ghi đè phương thức sendEvent: trên NSWindow và kiểm tra 'firstResponder', nếu đó là ViewA, không gọi số [super sendEvent:event] để ViewA sẽ không nhận được bất kỳ sự kiện nào.

0

Trong trường hợp bất kỳ ai vẫn đang tìm câu trả lời cho các loại câu hỏi này ngày nay, tôi chỉ quản lý việc này bằng cửa sổ con, giải pháp được mô tả trong this accepted answer. Ngoài ra, nếu bạn muốn thực hiện các cửa sổ trong suốt (/ rõ ràng màu), nhưng vẫn nhận được sự kiện chuột vào nó, đưa dòng này thành hành động cũng như:

[overlayWindow setIgnoresMouseEvents:NO]; 
0

anh chị em ruột xem khối, quan điểm hậu duệ không như đứa trẻ sẽ propegate chuột sự kiện thượng nguồn để cha mẹ của nó. Để chặn con cháu thúc đẩy các sự kiện cho cha mẹ của họ, bạn phải vượt qua các sự kiện trong đứa trẻ và không gọi siêu trên cùng một sự kiện. Gọi siêu sẽ đẩy sự kiện này đến sự kiện cha mẹ của nó. Đây là một sự khám phá đầy đủ về các sự kiện và quan điểm anh chị em/giảm dần: (được cảnh báo dày đặc) http://stylekit.org/blog/2016/01/28/Hit-testing-sub-views/