2017년 2월 1일 수요일

자마린 스튜디오(Xamarin Studio)에서 간단한 네비게이션 코드 구현 데모 입니다.

iOS에서는 모달리스(아래에서 위로 올라오는)형태로 뷰를 전환할 때 present메서드를 호출해서 처리합니다좌우로 네비게이션을 하는 경우 네비게이션 컨트롤러를 사용해서 pushViewController(), popViewController()메서드를 사용해서 처리합니다

자마린에도 비슷한 처리를 하는 메서드가 구현되어 있습니다.
프로젝트 생성시에 작업한 페이지에 아래와 같이 코드를 추가합니다. 형광색으로 표시된 부분이 추가된 코드 블럭입니다. 

using Xamarin.Forms;

namespace DemoPageNavi
{
    public partial class DemoPageNaviPage : ContentPage
    {
        public DemoPageNaviPage()
        {
            Title = "Main Page";

            Button gotoModelessButton = new Button
            {
                Text = "Go to Modeless Page",
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions = LayoutOptions.CenterAndExpand
            };
            gotoModelessButton.Clicked += async (sender, args) =>
            {
                await Navigation.PushAsync(new ModelessPage());
            };

            Button gotoModalButton = new Button
            {
                Text = "Go to Modal Page"
                HorizontalOptions = LayoutOptions.Center, 
                VerticalOptions = LayoutOptions.CenterAndExpand
                                               
            };
            gotoModalButton.Clicked += async (sender, args) =>
            {
                await Navigation.PushModalAsync(new ModalPage());
            };

            Content = new StackLayout
            {
                Children =
                {
                    gotoModelessButton,
                    gotoModalButton
                }
            };

        }
    }
}

(Model페이지에 라벨을 추가)
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="DemoPageNavi.ModalPage">
    <ContentPage.Content>
        <Label Text="Modal Page" />
    </ContentPage.Content>

</ContentPage>

(Modeless페이지에 라벨을 추가)
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="DemoPageNavi.ModelessPage">
    <ContentPage.Content>
        <Label Text="Modeless Page" /> 
    </ContentPage.Content>

</ContentPage>

App.cs에 아래의 코드가 추가되어 있어야 합니다.

using Xamarin.Forms;

namespace DemoPageNavi
{
    public partial class App : Application
    {
        public App()
        {
            MainPage = new NavigationPage(new DemoPageNaviPage()); 
        }


상단에 네비게이션바가 생성되고 좌우로 네비게이션이 됩니다. 



두번째 버튼을 클릭하면 하단에서 위로 올라오는 것을 볼 수 있습니다. 


모달리스 페이지에 아래의 코드를 추가한다.

namespace DemoPageNavi
{
    public partial class ModelessPage : ContentPage
    {
        public ModelessPage()
        {
            Title = "Modeless Page";

            Button goBackButton = new Button
            {
                Text = "Back to Main",
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions = LayoutOptions.Center
            };
            goBackButton.Clicked += async (sender, args) =>
            {
                await Navigation.PopAsync();
            };

            Content = goBackButton;
 

        }
    }
}

모달페이지에 아래의 코드를 추가한다. 일종의 백버튼을 만들어서 원래 페이지로 돌아가도록 유도한다.

using System.Collections.Generic;

using Xamarin.Forms;

namespace DemoPageNavi
{
    public partial class ModalPage : ContentPage
    {
        public ModalPage()
        {
            Title = "Modal Page";

            Button goBackButton = new Button
            {
                Text = "Back to Main",
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions = LayoutOptions.Center
            };

            goBackButton.Clicked += async (sender, args) =>
            {
                await Navigation.PopModalAsync();
            };

            Content = goBackButton;

        }    
    }
}



이번에는 네비게이션바의 색상을 변경하는 데모 코드입니다. 아래의 실행을 보면 상단의 네비게이션바의 색상이 청색으로 글자색은 핑크로 변경된 것을 볼 수 있습니다. 

using Xamarin.Forms;

namespace DemoPageNavi
{
    public partial class App : Application
    {
        public App()
        {
            MainPage = new NavigationPage(new DemoPageNaviPage())
            {
                BarBackgroundColor = Color.Blue, 
                BarTextColor = Color.Pink 
            };

        }









이번에는 모달리스에서 백버튼을 처리하는 코드입니다. 다음과 같이 하면 백버튼이 숨겨지도록 할 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        x:Class="DemoPageNavi.ModelessPage"
         NavigationPage.HasBackButton="False">
    <ContentPage.Content>
        <Label Text="Modeless Page" /> 
    </ContentPage.Content>
</ContentPage>

재물이나 코드에서 한군데만 작업하면 됩니다. 양쪽이 필요하지 않고 편한데로 추가하면 됩니다.

using Xamarin.Forms;

namespace DemoPageNavi
{
    public partial class ModelessPage : ContentPage
    {
        public ModelessPage()
        {
            Title = "Modeless Page";
            //
백버튼을 추가하는 코드 
            NavigationPage.SetHasBackButton(thisfalse); 





모달리스에서 백버튼을 추가해서 사용하는 데모 코드 입니다.
기존에 혹시 재물에 추가했던 백버튼 속성이 있으면 제거합니다.

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        x:Class="DemoPageNavi.ModelessPage">
    <ContentPage.Content>
        <Label Text="Modeless Page" /> 
    </ContentPage.Content>
</ContentPage>

using Xamarin.Forms;

namespace DemoPageNavi
{
    public partial class ModelessPage : ContentPage
    {
        public ModelessPage()
        {
            Title = "Modeless Page";
            //
백버튼을 추가하는 코드 
            NavigationPage.SetHasBackButton(thistrue); 
            NavigationPage.SetBackButtonTitle(this"go back");
            //
네비게이션바가 보이도록 코딩 

            NavigationPage.SetHasNavigationBar(thistrue);



            Button goBackButton = new Button
            {
                Text = "Back to Main",
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions = LayoutOptions.Center
            };
            goBackButton.Clicked += async (sender, args) =>
            {
                await Navigation.PopAsync();
            };

            Content = goBackButton; 
        }
    }
}

실행하면 모달리스 버튼을 클릭했을 때 새로운 페이지에서 백버튼이 추가된 것을

볼 수 있습니다.

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

5월 14일 새벽에 chatGPT 4o가 발표되었습니다. 옵티마이즈, 옴니라는 의미인데 실시간 통역, 다자간 회의, 멀티모달 기능의 강화등이 보이네요.

  초격차로 OpenAI진영이 다시 앞서가는 모양을 보여주고 있습니다. 저도 새벽에 일어나자 마자 올라온 영상들과 글을 정리하고 있습니다. ㅎㅎ 영화 HER의 사진이 새벽에 많이 올라왔었는데 저도 안본 영화입니다. 주말에 한번 봐야 할 것 같습니다....