2014-11-05 72 views
1

我有一個NSSegmentedControl,其中,在用戶單擊時,應在動作發送到其目標之前滿足一些條件。NSSegmentedControl以編程方式突出顯示段

直到現在,我設法做到這一點,通過重寫-mouseDown事件處理程序和調用segmentedControl的[super mouseDown]處理程序,只有在成功檢查我的條件後。 只有一個問題。直到調用[super mouseDown]之前,用戶沒有任何視覺線索表明該段已被點擊。

所以,問題是:有沒有一種方法來設置一個「突出」狀態編程(或多或少像「setHighlighted」爲NSButtons)?

回答

1

您可以取消選擇操作方法中點擊的片段。 你可以通過額外的操作方法

- (IBAction)toggleSegments:(id)sender 
{ 
    NSSegmentedControl *segmentedControl = sender; 
    NSInteger selectedSegment = segmentedControl.selectedSegment; 

    if (! conditionsAreMet) { 
     [segmentedControl setSelected:NO forSegment:selectedSegment]; 

     return; 
    } 

    [NSApp sendAction:@selector(reallyToggleSegments:) to:nil from:sender]; 
} 
+0

謝謝Pierre。你的解決方案比沒有更好,但仍然有一些問題。例如,在測試過程中,該段將顯示爲* selected *,表示該選項已被接受。我正在尋找一種僅突出顯示段的方式,而不是選擇它。 – 2014-11-05 16:42:16

1

繞行時,不滿足條件不調用-[NSSegmentedControl mouseDown]的相反,你需要不調用-[NSSegmentedCell stopTracking:at:inView:mouseIsUp:]

下面是一個NSSegmentedControl子類,我寫了使用委託有條件地允許段選擇:https://gist.github.com/michal-tomlein/39171668c580ac0d497d

你會看到,當您按住鼠標按鈕的段突出,但隨後未加亮和選擇保持不變如果您從委託方法返回NO

如果從Interface Builder使用它,請不要忘記設置視圖類(MTSegmentedControl)和單元類(MTSegmentedCell)。

+0

謝謝Michal。我會試一試你的代碼,並讓你知道它是否解決了我的問題。 – 2015-08-16 10:54:16

相關問題