如何使用 Xamarin.Mac 从 NSTableView 获取已编辑单元格的行和列?

How can I get the row and column of an edited cell from NSTableView using Xamarin.Mac?

我正在构建一个 Xamarin.Mac 应用程序,其中一个 ViewControllers 包含一个 NSTableView。我已经成功填充 table 视图,但我希望用户能够编辑某些单元格内容。

在功能上,我还能够获取单元格编辑table。但是,我无法提取已编辑单元格的行和列。 这可能吗?

我有 NSTableViewDelegate 代码:

public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
{
    // Get the data
    var Data = this._dataSource.DataRecords[(int)row];

    NSTextField view = (NSTextField)tableView.MakeView(CellIdentifier, this);
    if (view == null)
    {
        view = new NSTextField();
        view.Identifier = CellIdentifier;
        view.BackgroundColor = NSColor.Clear;
        view.Bordered = false;
        view.Selectable = true;
        view.Editable = true;
        view.EditingEnded += this.EditingEnded;
    }

    // Setup view based on the column selected
    if(tableColumn.Title.Equals(string.Empty)) {
        view.IntValue = Convert.ToInt16(row);
    }
    else {
        view.StringValue = Data.Get(tableColumn.Title).ToString();
    }

    return view;
}

void EditingEnded(object sender, EventArgs e)
{
    // I can get a reference to the correct, edited, NSTextField 
    //   with the following line.
    var textField = ((NSNotification)sender).Object as NSTextField;

    // However, HERE, I would like to know what row and column was edited so 
    //  that I can update my source data with the user-made change.
}

有谁知道如何使用此逻辑来获取已编辑单元格在 NSTableView 中的位置?

我正在使用 Xamarin.Mac,但我假设如果我为我的应用程序使用 Swift 或 Objective-C,同样的 logic/question 也适用。我也很乐意用这两种语言中的任何一种回答。

您可以使用 NSTableView 获取 NSTableView 中任何 NSView 的列和行:

  • RowForView
  • ColumnForView

示例:

var textField = ((NSNotification)sender).Object as NSTextField;
var row = someTableView.RowForView(textField);
var column = someTableView.ColumnForView(textField);