【问题标题】:UI button listener AddListener not working in a loop [duplicate]UI按钮侦听器AddListener不在循环中工作[重复]
【发布时间】:2017-04-26 13:26:49
【问题描述】:

我遇到了 UI 监听器的问题。我尝试为 UI 的 for 循环中的方法分配点击侦听器,但每次我都选择了最后一个选项。

public Button[] options;

void Start () 
{
    for(int i = 0; i < options.Length; i++)
    {
        options[i].onClick.AddListener(()=> {OptionPressed(i);});
    }
}

private void OptionPressed(int i)
{
    print (i);
}

总是打印 3。我的问题是为什么?还有为什么只有 3 个按钮的时候是 3,所以应该是 2?

【问题讨论】:

    标签: c# user-interface unity3d


    【解决方案1】:

    它打印3,因为您没有对i 的值进行装箱,它的值在每次迭代时都会被重写。
    要解决此问题,请尝试执行以下操作:

    for ( int i = 0; i < options.Length; ++i )
    {
        int j = i;
        options[i].onClick.AddListener( () => { OptionPressed(j); } );
    }
    

    Check the difference

    【讨论】:

    • 这个问题已经被问了很多次了,现在应该将其作为重复项关闭,除非该问题的脚本中存在其他问题。
    • 谢谢@m.rogalski,我应该考虑一下。
    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多