팝업 페이지에 Rg.Plugins.Popup.Pages를 사용하고 있습니다. 버튼을 누르면 팝업이 페이지 중간에 나타나고 선택할 수있는 라디오 버튼이 있으며 완료되면 투명한 배경을 터치하여 출구. 내 문제는 배경 페이지에 페이지의 onAppearing 메소드에서 팝업 페이지에서 선택한 내용에 따라 수정해야 할 레이블이 있다는 것입니다. 팝업 페이지의 배경을 터치 할 때마다 사라지고 onAppearing of the background 페이지가 호출되지 않습니다!
버튼은 배경 페이지에 배치됩니다.
protected override void OnAppearing()
{
for (int i = 0; i < TestingClass.multiselection.Count; i++)
{
if (TestingClass.multiselection[i].is_selected)
btn.Text += TestingClass.multiselection[i].description;
}
base.OnAppearing();
}
팝업이 나타날 때 정적 클래스에서 값을 얻습니다. 값은 다음과 같이 저장됩니다.
private void RadioButton_Clicked(object sender, System.EventArgs e)
{
var rb = sender as RadioButton;
var selection = rb.BindingContext as multi_selection;
if (selection != null && selection.is_selected == true)
{
selection.is_selected = false;
}
else
if (selection != null && selection.is_selected == false)
{
selection.is_selected = true;
TestingClass.multiselection.Add(selection);
}
}
뷰에 팝업을 추가 할 때 OnApperearing 및 OnDisappearing이 모두 호출되지 않습니다.
에서 애플 문서 , 그것은 말합니다 :
viewWillAppear :
이 메서드는 뷰 컨트롤러의 뷰가 뷰 계층 구조에 추가되기 전과 뷰를 표시하기 위해 애니메이션이 구성되기 전에 호출됩니다.
에서 안드로이드 :
OnCreate
OnCreate는 활동이 생성 될 때 호출되는 첫 번째 메서드입니다.
팝업을 추가하거나 팝업을 제거하는 것은 새보기를 생성 / 제거하거나 계층 구조에서보기를 추가 / 제거하지 않습니다. 따라서 이러한 수명주기 메서드는 해당 시점에 호출되지 않습니다.
해결책:
팝업에서 선택 후 버튼의 텍스트를 설정하는 방법은 Денис Чорный
의 답변에 동의 합니다. 코드로 명확히하겠습니다.
1. 용도 eventHandle
:
팝업 페이지에서 다음을 정의하십시오 EventHandler
.
public EventHandler SelectedStringChanged { get; set; }
에서 RadioButton_Clicked
SelectedStringChanged를 호출하는 줄을 추가합니다.
private void RadioButton_Clicked(object sender, System.EventArgs e)
{
var rb = sender as RadioButton;
var selection = rb.BindingContext as multi_selection;
if (selection != null && selection.is_selected == true)
{
selection.is_selected = false;
}
else
if (selection != null && selection.is_selected == false)
{
selection.is_selected = true;
TestingClass.multiselection.Add(selection);
}
//Add this line
SelectedStringChanged(sender, e);
}
백그라운드 페이지에서 btn.text를 처리하는 메서드를 만듭니다.
private void Handle_SelectedStringChanged(object sender, EventArgs rags)
{
// ... your code
for (int i = 0; i < TestingClass.multiselection.Count; i++)
{
if (TestingClass.multiselection[i].is_selected)
btn.Text += TestingClass.multiselection[i].description;
}
}
팝업 방법에서 방법을 사용하십시오 Handle_SelectedStringChanged
.
private async void OnOpenPupup(object sender, EventArgs e)
{
_loginPopup.SelectedStringChanged += Handle_SelectedStringChanged;
await PopupNavigation.Instance.PushAsync(_loginPopup);
}
MessageingCenter
또한 작동합니다.백그라운드 페이지에서 :
MessagingCenter.Subscribe<MainPage>(this, "stringSelected", (sender) => {
// do something whenever the "stringSelected" message is sent
for (int i = 0; i<TestingClass.multiselection.Count; i++)
{
if (TestingClass.multiselection[i].is_selected)
btn.Text += TestingClass.multiselection[i].description;
}
});
팝업 페이지에서 :
private void RadioButton_Clicked(object sender, System.EventArgs e)
{
var rb = sender as RadioButton;
var selection = rb.BindingContext as multi_selection;
if (selection != null && selection.is_selected == true)
{
selection.is_selected = false;
}
else
if (selection != null && selection.is_selected == false)
{
selection.is_selected = true;
TestingClass.multiselection.Add(selection);
}
MessagingCenter.Send<MainPage>(this, "stringSelected");
}
참조 : 메시징 센터
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다