2013-07-09 96 views
1

我試圖找到一個解決這個問題,我問創建一個NSView早些時候:Populate SourceList in Xamarin.Mac app編程在Xamarin工作室

我目前正在實施NSOutlineViewDelegateGetView方法,看看是否可能會在一些文本OutlineView我有。

但我堅持試圖添加東西到NSView對象。當我查看示例OutlineView(默認情況下將其拖到窗口時獲得的示例)時,每個項目都有一個TableCellView。該結構看起來像這樣(頭部,然後再經常項目):

Table Cell View 
    Static Text - HEADER CELL 
    Text Field Cell - HEADER CELL 

Table Cell View 
    Image View 
    Image Cell 
    Static Text - Table View Cell 
    Text Field Cell - Table View Cell 

到目前爲止,我的方法是這樣的:

public override NSView GetView (NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item) 
{ 
    var navigation = item as Navigation; 
    var cell = new NSTableCellView(); 

    if (navigation.IsHeader) { 
    } else { 
    } 

    return cell; 
} 

我的第一個猜測,對於標題,例如,我創建一個NSTableHeaderCell並將StringValue屬性設置爲navigation.Name。但我不知道如何將它作爲孩子添加到我的NSTableViewCell

或者我是否完全錯誤的方式?我對Mono和Xamarin非常陌生(只使用WPF和XAML完成了C#和Visual Studio),之前我從來沒有在Objective-C中編寫過程序(所以我花了一段時間才弄清方法/類的奇怪語法)。

回答

2

您將在XCode中看到Table Cell View對象具有可以設置的「標識符」。在我的情況下,我有'HeaderCell'和'DataCell'。

我的代碼如下所示:

public override NSView GetView(NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item) 
{ 
    if(IsGroupItem(outlineView, item)) 
    { 
     return outlineView.MakeView("HeaderCell", this); 
    } 

    return outlineView.MakeView("DataCell", this); 
} 

這將在Xcode中創建定義的TableCellView的適當實例。

在我的情況下,我使用Cocoa綁定而不是數據源,因此我的視圖會自動填充數據。這可能是您想要調查的方法,因爲它更接近WPF/XAML數據綁定方式。但是,它有一個陡峭的學習曲線,很難調試(如WPF/XAML數據綁定!)。

除了簡單地返回單元格之外,您可以訪問它的子視圖並適當地設置它們。喜歡的東西:

var dataView = outlineView.MakeView("DataCell", this); 
((NSImageView)dataView.Subviews[0]).Image = // assign an image 
((NSTextField)dataView.Subviews[1]).StringValue = // assign your text 
return dataView; 

(注:我剛鍵入從我的頭頂,它可能無法正常工作,是 - 但希望你的想法)

+0

將這種或者其他的覆蓋能夠檢測用戶何時編輯了項目的文本字段的字符串值? – salgarcia

+0

@salgarcia看到這個後續問題:http://stackoverflow.com/questions/17889328/listen-to-events-from-programatically-created-nsview – TheNextman