- Home /
 
Can't change UI Button Listeners
I've been trying to change the Onclick event I set up in the editor of a button to something else.I'm Calling removeAllListeners() as some examples I've found and then adding as a listener an anonymous function. When I click the button after OnGameEnd Runs, I still see the wrong event ocurring and no loadLevel. I now OnGameEnd does run since I can see the text changing. Any ideas of what I'm doing wrong or is this a bug? For now I'll work around this just checking a boolean in the event I set in the editor, but I would like to know how to change button events in runtime properly.
In the code below, "arrowButton" is same as GetComponent(), I just cached it in a private variable at the start.
         /// <summary>
         /// Re-enables arrow, makes it so we load the next level once we click it.
         /// </summary>
         public void OnGameEnd() {
             arrowButton.interactable = true;
             arrowAnimator.SetBool("Disabled", false);
 
             GetComponentInChildren<Text>().text = gameEndText;
             
             // When this arrow is clicked now that the game is over, it'll just load the next level.
             arrowButton.onClick.RemoveAllListeners();
             
             arrowButton.onClick.AddListener(() => Application.LoadLevel(nextLevelName));
         }
 
              Answer by jenci1990 · Dec 24, 2014 at 07:59 AM
If you add listener with script,the RemoveAllListeners() works, but if you add listener in editor use this:
 arrowButton.onClick.SetPersistentListenerState(0, UnityEngine.Events.UnityEventCallState.Off);
 
               This line disable the first (0.) event what you add in inspector.
Thank you! this completely worked. What was also strange is that event I added using Addlistener didn't execute until I turned off that event I added in the editor. Working code now looks like this:
 arrowButton.onClick.SetPersistentListenerState(0, UnityEngine.Events.UnityEventCallState.Off);
     
 arrowButton.onClick.AddListener(() => Application.LoadLevel(nextLevelName));
 
                 Your answer
 
             Follow this Question
Related Questions
Unity 4.6 button movement problem 1 Answer
How do I create a button that toggles with the 4.6 UI? 6 Answers
How to detect mouseEnter, mouseLeave, mouseHover events with UIElements (Unity 2019.3) 3 Answers
(4.6 UI) How to set up a window with x buttons, with a scroll bar? 1 Answer
UI Button OnClick Function - How to get name of button that was clicked? 2 Answers