2016-11-04 46 views
-1

我一直在嘗試創建一個輸入字段,它在編輯時激活滾動查看下面並顯示相關信息的主題(例如:用戶名,地址.. ),但是在調用輸入字段事件來激活滾動視圖時,它不會接受我創建的函數。感謝您閱讀我可怕的英語,並幫助您。需要幫助創建一個輸入字段和滾動視圖[Unity3d-C#]

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); 
    } 
+0

究竟是什麼沒有被激活,無效的selectUsernameInput或void的內部的setactive? – Mennolp

+0

以及代碼的想法是當用戶在輸入字段中鍵入他們的用戶名時,現在禁用的滾動視圖將激活。但是我調用selectUsernameInput或endEditingUsernameInput它設置了「方法或委託'IdAndPasswordController.endEditingUsernameInput() '參數不符合委託'UnityEngine.Events.UnityAction (字符串)'參數「。 – Kienhuyvn

回答

1

這是很難理解這個問題,但我可以發現大問題已經。您應該註冊一次UI事件。現在,你正在註冊三個事件更新()函數。將這些代碼移動到開始()函數。

調用輸入字段事件激活滾動視圖不會 接受我所創建的身邊你傳遞它的功能

裹委託功能。例如,username.onValueChanged.AddListener(delegate { selectUsernameInput(); });

Transform.GetChild需要int作爲參數,但你逝去的List將其與usernamedataload.content.GetChild(usernamelist);。我不知道你爲什麼要這樣做,但你應該像(1,2,3,4)那樣通過一個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() 
{ 

}