1

設置包含字符串的NSArray並將(通過NSArrayController)內容數組連接到NSPopUpButton(此標準問題的一個很好的答案在這裏,NSPopUpButton + Bindings + Show All Option)很簡單。如何在NSPopUpButton的菜單中綁定基於視圖的NSMenuItem?

我有一個NSPopUpButton並希望菜單中的每個項目使用視圖進行繪製(從10.5開始,使用NSMenuItem的-setView:方法可以添加視圖到菜單項)。

到目前爲止,我有以下方法。

1)的模型對象,它提供的意見,

@interface MenuViewsModel : NSObject 
// Array of views for the pop up button to display 
@property NSArray *previewViews; 
@end 

2)在IB我的陣列控制器添加到我的XIB和設置它的內容陣列模型的previewViews

3)接着我結合NSPopUpView到陣列控制器:

  • 內容 - > arrayController.arrangedObjects
  • 含量值 - > arrayController.arrangedObjects

彈出菜單將視圖的指針顯示爲字符串,而不是採用視圖和設置th e NSMenuItem的view屬性。例如彈出按鈕顯示的項目,如,

<的NSView:0x61000014e910>

<的NSView:0x61000014e9c0>

+0

[彈出式按鈕的綁定參考](https://developer.apple.com/library/mac/documentation/cocoa/reference/CocoaBindingsRef/BindingsText/NSPopUpButton.html)表示「內容值」綁定適用於與「內容」綁定中的對象對應的字符串數組。如果綁定將使用基於視圖的菜單,我認爲「內容值」綁定應該指向一個NSViews數組,而「內容」指向由這些視圖表示的一個對象數組。也就是說,這可能都是不可能的。 – stevesliva

+0

是的,我放棄了! –

回答

0

您是soooooo將要完成。你需要做的是arrayController.arrangedObjects。[insertModelDisplayProperty]

我還沒有足夠的代表發佈圖像...否則,我會給你一個屏幕截圖 - 我正在這個問題上工作在這個確切的問題並已使其工作。

在XIB設計器中,ControlValues的綁定設置中將會有一個modelKeyPath屬性。將模型關鍵路徑值設置爲要爲每個項目顯示的屬性。

我有一個更簡單的問題來解決,但需要類似的方法...我仍然使用綁定;然而。

stevesliva的評論讓我思考。我需要對每個菜單項目進行簡單的樣式更改;所以我導出了我自己的NSMenu,並替換了由NSPopupButton包裝的那個。對我來說,覆蓋重要的方法是:

- (NSMenuItem *)insertItemWithTitle:(NSString *)aString 
         action:(SEL)aSelector 
        keyEquivalent:(NSString *)keyEquiv 
         atIndex:(NSInteger)index 

if((aString != nil) && ([aString length] > 0)) 
{ 
    NSMenuItem *result = [[NSMenuItem alloc] initWithTitle:aString action:aSelector keyEquivalent:keyEquiv]; 

    NSView *menuView =[[AppMenuItemView alloc] init]; 

    menuView.autoresizingMask = NSViewWidthSizable; 

    [result setView: menuView]; 

    [self insertItem:result atIndex:index]; 

    return result; 
} 
else 
{ 
    return [super insertItemWithTitle:aString action:aSelector keyEquivalent:keyEquiv atIndex:index]; 
} 

}


如果我們在我用過,你可以很容易地看到史蒂夫的想法是如何合理......在這樣的邏輯字符串比較擴大,你可以使用「title」作爲視圖字典的關鍵字,然後在這裏使用它來分配每個項目的視圖屬性。

請注意,這可能需要修改您的建模方式 - 這些視圖可能必須綁定到單例或其他關聯對象內存的方式......並不是說這部分是微不足道的......但是,它可能是。最後,這可能是一個值得重新考慮的重要因素。請注意,addItemWithTitle方法可能需要與insertItemWithTitle方法類似地進行編碼。

把所有這些結合在一起,是的......綁定對於這個用例來說可能是不值得的,你的原始帖子應該被投票(如果我可以用我的微不足道的聲望投票)。

+0

我想要顯示的對象(視圖)是數組中的對象,所以我不清楚如何設置模型屬性會有所幫助。 –

+0

那麼,這些對象是否具有某種顯示字符串的屬性? –

+0

不可以。基本上,您不能使用託管數組視圖綁定到彈出按鈕的視圖屬性。綁定是半焙。很高興迅速已經擺脫他們。 –

相關問題