setEnabled:
方法不工作在我的子類NSButton
其中我已覆蓋mouse{down,drag,up}
和rightMouse{down,drag,up}
。我覺得按鈕的啓用/禁用應該是這些功能之外 - 當它被禁用的按鈕不應該接受擺在首位的鼠標事件。NSButton子類仍然運行鼠標事件方法,即使啓用是否
我必須做一個明確的支票,當我重寫這些功能呢?
setEnabled:
方法不工作在我的子類NSButton
其中我已覆蓋mouse{down,drag,up}
和rightMouse{down,drag,up}
。我覺得按鈕的啓用/禁用應該是這些功能之外 - 當它被禁用的按鈕不應該接受擺在首位的鼠標事件。NSButton子類仍然運行鼠標事件方法,即使啓用是否
我必須做一個明確的支票,當我重寫這些功能呢?
我認爲你需要做自己的支票。
如Apple's writeup on Cocoa Event Architechture解釋的,包含您的按鈕窗口被髮送mouseDown:
(或任何其它方法是適當的),以您的按鈕,響應於recieving一個事件。爲了使窗口決定不發送郵件,那就要首先確定該按鈕是NSControl
子類(enabled
是的NSControl
的屬性,但不是NSView
),然後檢查enabled
標誌。這超出了窗口的責任範圍。啓用的控件不是事件調度系統中第一響應者狀態的一部分。
作爲一個有趣的洞察力,如果你看看GNUStep's -[NSControl mouseDown:]
implementation,他們確實在處理事件之前檢查[self isEnabled]
。
使對者均基於鏈接的意義..謝謝.. :) – Roshan
很高興我能幫忙。 –
爲什麼不應該它接收鼠標事件時,它是無效?通過檢查條件禁用按鈕時,不要做任何事情。 – TheAmateurProgrammer