需要帮助创建输入字段&滚动视图[Unity3d-C#]

时间:2016-11-04 07:54:53

标签: c# unity3d

我一直在尝试创建一个输入字段,在编辑时激活下面的滚动视图并向主题显示相关信息(例如:用户名,地址...),但是在调用输入字段事件以激活滚动时查看它不会接受我创建的功能。感谢阅读我可怕的英语并帮助你。

public InputField username;
    public InputField password;
    public List<string> usernamelist;
    public Button enter;
    public ScrollRect usernamedataload;

    // Use this for initialization
    void Start () {
        string temp = "";
        if (PlayerPrefs.GetString ("username") == null) {
            username.text = temp;
        } else if (PlayerPrefs.GetString ("password") == null) {
            password.text = temp;
        } else {
            username.text = PlayerPrefs.GetString ("username");
            password.text = PlayerPrefs.GetString ("password");
        }
        usernamedataload.gameObject.SetActive (false);

    }   

    // Update is called once per frame
    void Update () {
        enter.onClick.AddListener (enterKeyDown);
        username.onValueChanged.AddListener(selectUsernameInput);
        username.onEndEdit.AddListener (endEditingUsernameInput);
    }
    void selectUsernameInput(){
        usernamedataload.gameObject.SetActive (true);
        usernamedataload.content.GetChild (usernamelist);
    }
    void endEditingUsernameInput(){
        usernamedataload.gameObject.SetActive (false);
    }

1 个答案:

答案 0 :(得分:1)

很难理解这个问题,但我已经发现了大问题。您可以注册一次UI事件。现在,您正在 Update()函数中注册每帧三个事件。将这些代码移动到 Start()函数。

  

调用输入字段事件以激活滚动视图,它不会   接受我创建的功能

围绕您传递的函数包装委托。例如,username.onValueChanged.AddListener(delegate { selectUsernameInput(); });

Transform.GetChildint作为参数,但您使用Listusernamedataload.content.GetChild(usernamelist);传递给它。我不知道你为什么这么做,但是你应该像{1,2}那样将int传递给它。

您可以开始使用以下代码。它解决了上面提到的所有问题,并将进行编译。

public InputField username;
public InputField password;
public List<string> usernamelist;
public Button enter;
public ScrollRect usernamedataload;

// Use this for initialization
void Start()
{
    string temp = "";
    if (PlayerPrefs.GetString("username") == null)
    {
        username.text = temp;
    }
    else if (PlayerPrefs.GetString("password") == null)
    {
        password.text = temp;
    }
    else
    {
        username.text = PlayerPrefs.GetString("username");
        password.text = PlayerPrefs.GetString("password");
    }
    usernamedataload.gameObject.SetActive(false);

    enter.onClick.AddListener(enterKeyDown);
    username.onValueChanged.AddListener(delegate { selectUsernameInput(); });
    username.onEndEdit.AddListener(delegate { endEditingUsernameInput(); });
}

// Update is called once per frame
void Update()
{

}

void selectUsernameInput()
{
    usernamedataload.gameObject.SetActive(true);
    usernamedataload.content.GetChild(0);
}

void endEditingUsernameInput()
{
    usernamedataload.gameObject.SetActive(false);
}

void enterKeyDown()
{

}