(자마린교육,네비게이션을위한 네비게이션스택에 푸시,화면전환)Pushing Pages to the Navigation Stack
Hierarchical Navigation
n 로그인 NavigationPage 클래스는 사용자들이 앞, 뒤로 계층적인 page 네비게이션을 할 수 있도록 지원하는데 Page 객체의 Stack(LiFo 구조)을 구현했다.
n 한 페이지에서 다른 페이지로 이동하기 위해서 Navigation Stack에 푸시하면 되고 이 전 페이지로 돌아가기 위해서는 응용프로그램은 Navigation Stack에서 현재 페이지를 Pop하면 된다.
n 계층적인 네비게이션에서 NavigationPage 클래스는 ContentPage 객체의 스택을 통해 탐색을 하는데 모든 플랫폼에서 Page.Title 속성으로 페이지 상단 타이틀을 표시한다.
n 루트 페이지 생성하기
맨 처음 페이지는 App.cs의 다음 코드를 통해 생성되는데 Page1Xaml ContentPage의 인스턴스가 Navigation Stack의 상단에 푸시되면서 현재의 활성화된 페이지가 되고 또한 현재 응용프로그램의 Root 페이지가 된다.
참고로 Xamarin.Forms 응용프로그램에서 계층적인 네비게이션을 수행하기 위해서 NavigationPage의 모든 인스턴스는 ContentPage 인스턴스가 되어야 한다.
public App ()
{
MainPage = new NavigationPage (new Page1Xaml ());
}
Page2Xaml 페이지를 탐색하기 위해서는 현재 페이지 Navigation 속성의 PushAsync 메소드를 통해 Page2Xaml 인스턴스가 전달되어야 한다.
async void OnNextPageButtonClicked (object sender, EventArgs e)
{
// Page2Xaml 페이지가 스택의 상단에 푸시되면서 Active Page가 된다.
await Navigation.PushAsync (new Page2Xaml ());
}
// PushAsync 메소드가 호출되면 두개의 이벤트가 발생되는데
// 현재 페이지는 OnDisappearing, 호출되는 페이지는 OnAppearing 이벤트가 발생한다.
// 두 이벤트가 발생된 후 PushAsync Task가 종료된다.
// 두 이벤트는 별로 이점이 없는데 iOS에서 OnDisappearing 이벤트는
// 응용프로그램이 종료될 때 호출된다.
Active Page는 디바이스 또는 스크린의 Back 버튼을 이용해서 Navigation Stack에서 Pop될 수 있는데 프로그래밍적으로 원래 페이지로 돌아가기 위해서 Page2Xaml 인스턴스는 PopAsunc 메소드에 의해 호출되어야 한다.
// 아래 코드에 의해 Page2Xaml 인스턴스는 스택의 상단에서 Pop되고
// 이전의 Page1Xaml 인스턴스가 Active Page가 된다.
// PopAsync 메소드가 호출되면 두개의 이벤트가 발생되는데
// 현재 Pop 되는 페이지는 OnDisappearing, 스택의 상단으로 올라오는 리턴되는
// 페이지는 OnAppearing 이벤트가 발생한다. 그다음 PopAsync Task가 종료된다.
async void OnPreviousPageButtonClicked (object sender, EventArgs e)
{
await Navigation.PopAsync ();
}
n Navigation 프로퍼티의 PushAsync 및 PopAsync 메소드는 Root 페이지를 제외한 모든 페이지를 Pop 시키기 위해 PopToRootAsync 메소드를 제공하는데 다음 예문을 보자.
async void OnRootPageButtonClicked (object sender, EventArgs e)
{
await Navigation.PopToRootAsync ();
}
댓글 없음:
댓글 쓰기