2013-02-22 57 views
6

我想檢查我的自定義NSButton目前是否處於按下狀態(用戶點擊它)在我的自定義drawRect方法中。這樣的事情:檢查NSButton在drawRect上是否關閉

- (void)drawRect:(NSRect)dirtyRect{ 
    if ([self buttonIsInPressedState]) { 
     [[self alternateBGImage] drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f]; 
    }else{ 
     [[self BGImage] drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f]; 
    } 
    [super drawRect:dirtyRect]; 
} 

你會如何檢查這樣的事情?可能嗎?

SOLUTION

我結束了檢查上的按鈕電池的mouseDownFlags。不知道這是否是「正確」的方式做到這一點,所以讓我知道,如果你有更好的建議:

- (void)drawRect:(NSRect)dirtyRect{   
    if ([self.cell mouseDownFlags] == 0) { 
     [[self BGImage] drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f]; 
    }else{ 
     [[self alternateBGImage] drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f]; 
    } 

    [super drawRect:dirtyRect]; 
} 

回答

2

我最終檢查了按鈕單元格上的mouseDownFlags。不知道這是否是「正確」的做法,所以讓我知道你是否有更好的建議。解決方案在上面的問題中更新。

4

我不認爲「drawRect:」是試圖抓住這個正確的地方。

您可以繼承NSButton,然後覆蓋mouseDown:setState:(查找「NSOnState」,表示按鈕已被選中或正在按下)。

+0

我試過self.state,但它只適用於按鈕是「開」或「關」!所以按鈕是「開」,一旦我按下並釋放它。我想檢查是否使用CURRENTLY按下。 MouseDown也是一個選項,但我無法使mouseUp因某種原因而工作。 – 2013-02-22 16:26:10

0
if([pBtn state]==NSOnState){ 
    NSLog(@" button Pressed ") 
}else{ 
    NSLog(@" button not pressed "); 

} 
+0

我試過self.state,但它只適用於按鈕是「開」或「關」!所以按鈕是「開」,一旦我按下並釋放它。我想檢查是否使用CURRENTLY按下。 – 2013-02-22 16:24:45

+0

你可以使用按鈕,它基本上是一個切換按鈕,也許你可以得到你想要實現的。 – Amitg2k12 2013-02-22 17:48:54

+0

我試過了。不起作用。我結束了上述工作。讓我知道你是否有更好的解決方案。 – 2013-02-22 18:01:11

5

我通過檢查[self isHighlighted]解決了這個問題。

+0

你是一個天使 – maxisme 2015-09-04 18:04:05

+1

我即將對生活感到很生氣 – maxisme 2015-09-04 18:04:22