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

时间:2017-08-14 21:42:12

标签: xamarin xamarin.mac

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

从功能上讲,我也可以让单元格可编辑。但是,我无法提取已编辑单元格的行和列。 这可能吗?

我有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,则会应用相同的逻辑/问题。我很乐意用这两种语言中的任何一种来回答。

1 个答案:

答案 0 :(得分:1)

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

  • RowForView
  • ColumnForView

实施例

Private Sub UserForm_Initialize()

Dim i As Integer

Combobox1.List = Worksheets(3).Range("AM3:AM13").Value

For i = 0 To Combobox1.ListCount - 1
    Combobox1.List(i) = Format(DateValue(Combobox1.List(i)), "dd mmm")
Next i

End Sub


Private Sub ComboBox1_Change()
 'Nothing here
End Sub

Private Sub InsertButton_Click()
    ActiveCell.Value = Combobox1.Value
End Sub