У меня есть динамически загружаемый список, состоящий из разных кнопок. При нажатии кнопки соответствующая запись в списке будет уничтожена. Теперь я хочу иметь дочернюю кнопку на каждой из динамически созданных родительских кнопок, которая уничтожит родительскую и дочернюю. И родитель должен «потерять» эту функцию удаления.
public void AddMoreButton()
{
if (lectureInput.text.Length < 1)
{
return;
}
lectureTitle.text = lectureInput.text;
creditsTitle.text = creditsInput.text;
swsTitle.text = swsInput.text;
GameObject button = (GameObject)Instantiate(prefabButton);
Button buttonInstance = button.GetComponentInChildren<Button>();
buttonInstance.onClick.AddListener(() => { Destroy(button); });
button.transform.SetParent(panel.transform, false);
button.layer = 5;
button.SetActive(true);
ClearInputs();
}
Вы можете скопировать код создания кнопки и просто переместить Destroy(button)
в ее AddListener
вызов. Убедитесь, что вы не меняете родительскую кнопку при создании childButton
, за исключением вызова Destroy(button)
. Вы также можете установить родителя на кнопку:
public void AddMoreButton()
{
if (lectureInput.text.Length < 1)
{
return;
}
lectureTitle.text = lectureInput.text;
creditsTitle.text = creditsInput.text;
swsTitle.text = swsInput.text;
GameObject button = (GameObject)Instantiate(prefabButton);
Button buttonInstance = button.GetComponentInChildren<Button>();
childButtonInstance.onClick.AddListener(() => { /*whatever the parent button should do*/ });
button.transform.SetParent(panel.transform, false);
button.layer = 5;
button.SetActive(true);
GameObject childButton = (GameObject)Instantiate(prefabButton);
Button childButtonInstance = childButton.GetComponentInChildren<Button>();
buttonInstance.onClick.AddListener(() => { Destroy(button); });
childButton.transform.SetParent(button, false);
childButton.layer = 5;
childButton.SetActive(true);
ClearInputs();
}
Вам, вероятно, придется отрегулировать его положение с помощью childButton.transform.Translate(Vector3(0f,0.5f,0f));
или чего-то еще, чтобы он не перекрывался со своей родительской кнопкой.
Это сработало. Однако мне пришлось изменить buttonInstance.onClick... на childButtonInstance.onClick... в нижней части кода.