2013-07-03 51 views
2

setEnabled:方法不工作在我的子類NSButton其中我已覆蓋mouse{down,drag,up}rightMouse{down,drag,up}。我覺得按鈕的啓用/禁用應該是這些功能之外 - 當它被禁用的按鈕不應該接受擺在首位的鼠標事件。NSButton子類仍然運行鼠標事件方法,即使啓用是否

我必須做一個明確的支票,當我重寫這些功能呢?

+0

爲什麼不應該它接收鼠標事件時,它是無效?通過檢查條件禁用按鈕時,不要做任何事情。 – TheAmateurProgrammer

回答

2

我認爲你需要做自己的支票。

Apple's writeup on Cocoa Event Architechture解釋的,包含您的按鈕窗口被髮送mouseDown:(或任何其它方法是適當的),以您的按鈕,響應於recieving一個事件。爲了使窗口決定不發送郵件,那就要首先確定該按鈕是NSControl子類(enabled是的NSControl的屬性,但不是NSView),然後檢查enabled標誌。這超出了窗口的責任範圍。啓用的控件不是事件調度系統中第一響應者狀態的一部分。

作爲一個有趣的洞察力,如果你看看GNUStep's -[NSControl mouseDown:] implementation,他們確實在處理事件之前檢查[self isEnabled]

+0

使對者均基於鏈接的意義..謝謝.. :) – Roshan

+0

很高興我能幫忙。 –

相關問題