Как получить строку и столбец редактируемой ячейки из NSTableView с помощью 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 для своего приложения. Я бы с радостью принял ответ на любом из этих языков.


person Brett    schedule 14.08.2017    source источник


Ответы (1)


Вы можете получить столбец и строку для любого NSView в вашем NSTableView, используя NSTableView:

  • Ровфорвиев
  • Колонкфорвиев

Пример:

var textField = ((NSNotification)sender).Object as NSTextField;
var row = someTableView.RowForView(textField);
var column = someTableView.ColumnForView(textField);
person SushiHangover    schedule 14.08.2017
comment
Большой! Да, это работает именно так, как мне нужно. Спасибо за помощь; Я определенно чему-то научился. - person Brett; 15.08.2017
comment
Нп, счастливого Xamarin.Mac ;-) - person SushiHangover; 15.08.2017