将回调发送到对话框模态

时间:2015-07-16 04:30:00

标签: c# unity3d

我正在为GUI系统开发可重用的库,我想将回调发送到静态方法,该方法显示模式对话框。 Pseudo-ish,我想做这样的事情:

void OnQuitButtonClick()
{
    var buttons = new OrderedDictionary();
    buttons.Add( "OK", (Action)(() => { Debug.Log("OK was pressed!"); }) );
    buttons.Add( "Cancel", (Action)(() => { Debug.Log("Cancel was pressed!"); }) );

    DialogBox.Show(
        "Do you really want to quit?",
        buttons
    );
}

然后,在DialogBox类中:

public static Show(string message, OrderedDictionary buttons)
{
    foreach (DictionaryEntry de in buttons)
    {
        var button = ...; // Instantiate the button object here.
        button.GetComponent<Button>().onClick.AddListener( () => { de.Value; Close(); } );
    }
}

void Close()
{
    Destroy(gameObject); // Destroys "self".
}

这不起作用,但这是我设法谷歌/阅读的方式,我觉得我非常接近。

任何关于如何进步的想法,也许会让它更漂亮一点,我们将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

您实际上并未执行按钮处理程序代码。你可能想要改变这个

button.GetComponent<Button>().onClick.AddListener( () => { de.Value; Close(); } );

到这个

button.GetComponent<Button>().onClick.AddListener( () => {
    ((Action)de.Value).Invoke();
    Close();
});