在Xamarin Studio中以编程方式创建NSView

时间:2013-07-09 08:58:35

标签: c# macos cocoa mono xamarin

我正在尝试找到我之前问过的这个问题的解决方案:Populate SourceList in Xamarin.Mac app

我目前正在尝试实现GetView的{​​{1}}方法,看看是否可以在我的OutlineView中创建一些文本。

但我坚持尝试向NSView对象添加内容。当我查看示例OutlineView(将它拖到窗口时默认获得的示例)时,每个项目都有一个NSOutlineViewDelegate。结构看起来像这样(首先是标题,然后是常规项目):

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

或者我是以完全错误的方式来做这件事的?我是Mono和Xamarin的新手(只使用WPF和XAML完成了C#和Visual Studio),之前我从未在Objective-C中进行过编程(所以我花了一些时间来弄清楚方法/类的奇怪语法)。

1 个答案:

答案 0 :(得分: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;

(注意:我只是从头顶输入它,它可能无法正常工作 - 但希望你能得到这个想法)