需要帮助创建输入字段&滚动视图[unity3d - c#]
本文关键字:视图 unity3d 滚动 帮助 创建 输入 字段 | 更新日期: 2023-09-27 18:16:12
我一直在尝试创建一个输入字段,在编辑时激活下面的滚动视图并显示主题的相关信息(例如:用户名,地址…),但在调用输入字段事件来激活滚动视图时,它不会接受我创建的函数。谢谢你读我糟糕的英语,不管你是谁,帮助我。
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);
}
这个问题很难理解,但我已经发现了一些大问题。你应该注册到一个UI事件一次。现在,你在Update()函数中每一帧注册三个事件。将这些代码移动到Start()函数。
调用输入字段事件来激活滚动视图它不会接受我创建的函数
将委托包裹在传递给它的函数周围。例如:username.onValueChanged.AddListener(delegate { selectUsernameInput(); });
Transform.GetChild
将int
作为参数,但您将List
与usernamedataload.content.GetChild(usernamelist);
一起传递给它。我不知道你为什么要这样做,但你应该传递一个int
到它像(1,2,3,4)。
可以从下面的代码开始。它修复了上面提到的所有问题,并且可以编译。
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()
{
}