2013-02-22 4 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]; 
} 

Как вы можете это проверить? Является ли это возможным?

РЕШЕНИЕ

я в конечном итоге проверки 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, но он работает только для того, чтобы кнопка была включена или выключена! Таким образом, кнопка «Вкл.», Как только я нажал ее и выпустил ее. Я хочу проверить, используется ли ПОСТОЯННОЕ нажатие. MouseDown также является опцией, но я не могу заставить mouseUp работать по какой-то причине. –

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

} 
+0

Я пробовал self.state, но он работает только для того, чтобы кнопка была включена или выключена! Таким образом, кнопка «Вкл.», Как только я нажал ее и выпустил ее. Я хочу проверить, используется ли ПОСТОЯННОЕ нажатие. –

+0

Можете ли вы использовать кнопку «Push», в основном кнопку переключения, возможно, вы можете получить то, что хотите достичь. – Amitg2k12

+0

Я пробовал. Не работает. Я закончил работу над этим. Дайте мне знать, если у вас есть лучшее решение. –

5

Я решил это, проверив [self isHighlighted].

+0

Ты ангел – maxisme

+1

Я собирался очень рассердиться на жизнь – maxisme