NSTokenField值已更改通知

时间:2016-11-02 09:23:50

标签: cocoa xamarin xamarin.mac nstokenfield

NSTokenField内输入时输入

我显示了此值的建议,GetCompletionStrings来自NSTokenFieldDelegate

public override string [] GetCompletionStrings (NSTokenField tokenField, string substring, nint tokenIndex, nint selectedIndex)
        {
            //return my values
        }

但如果我将从NSTokenFiled完全删除所有符号,则此事件将被解雇。

我需要在NSTokenFiled string value更改或清除或更新时收到通知,而无需点击输入按钮。

我在其中使用自定义nstoken字段TokenField : NSTokenField我覆盖了DidEndEditing,如下所示:

public override void DidEndEditing (NSNotification notification)
        {
            if (EditingFinished != null) {
                EditingFinished (null, null);
            }
            base.DidEndEditing (notification);
        }

只有在输入点击后才会调用此方法,而不是在文本更改时触发...

我还尝试在视图控制器中处理视图的更改事件,但不会调用

TagsSearchField.EditingFinished += OnTagFilterSet;
        TagsSearchField.Delegate = new TagFieldDelegate ();
        TagsSearchField.Changed += (o, e) => {
        //debug
        };

2 个答案:

答案 0 :(得分:1)

我设置了动作'已发送结束编辑'到令牌字段,在xib文件中,它现在工作。

调用此Change事件后

enter image description here

答案 1 :(得分:0)

您可以使用Changed事件使用NSTokenField捕获所有编辑更改;包括清晰,剪贴板剪裁等。

tokenField = new NSTokenField(new CGRect(100, 100, 300, 40));
tokenField.Delegate = this;
tokenField.Changed += (object sender, EventArgs e) =>
{
    Console.WriteLine($"changed: {tokenField.StringValue}");
    var tokenArray = tokenField.ObjectValue as NSArray;
    for (nuint i = 0; i < tokenArray.Count; i++)
    {
        Console.WriteLine(tokenArray.GetItem<NSString>(i));
    }
};
View.AddSubview(tokenField);