Press ESC to close

Xamarin Forms Master Page’den Başka Bir Sayfaya Gitmek

Merhaba arkadaşlar. Bu yazımda benim üzerinde çok durduğum bir problemden bahsedeceğim. Bu problem Xamarin.Forms’da Master Detail Page’in Master Sayfasından başka bir sayfaya gittiğimizde bir önce ki sayfaya geri dönememe sorunu. Örnek olması açısından aşağıda bir video gösteriyorum.

Görmüş olduğunuz gibi Master Page’den başka bir sayfaya gittiğimizde geri butonu çıkmıyor. Android için pek fazla sorun etmiyor. Çünkü telefonların zaten kendisinde geri butonları bulunmakta. Bu tuş ile geri çıkabiliyorsunuz. Lakin iOS cihazlar için bu pek mümkün değil. Çünkü geri butonları yok. Bu yüzden farklı teknikler kullanılmalı. 2 farklı yöntem var bunun için. Siz projeniz için hangisini tercih ederseniz onu kullanırsınız. Bunlardan birisi bir Navigation Service yazarak kendiniz her sayfa için geri butonu oluşturabilirsiniz. Bu yol, diğer yola göre biraz daha zahmetli. Ben bu yazıda bahsedeceğim yol ise; Master Detail Page’in Detail sayfasını sürekli olarak değiştirmek. Böylece projenizi daha kullanışlı bir hale de getirebilirsiniz. Örnek vermek gerekirse Ziraat Bankasının mobil uygulaması böyle bir yöntem kullanmakta.

Böyle bir proje yapmanız için bir Root Page oluşturmanız gerekmekte. Bir Master Detail Page değişkeni tanımlıyoruz. Tanımladıktan sonra bir kontrol yapmamız gerekiyor. Bu kontrol ile eğer değişkenin bir değeri yoksa bunu bizim vermemiz gerekiyor. Örneğin Master Detail Page’in Master sayfası sürekli aynıdır. Lakin Detail sayfası başlangıçta hep aynıyken sonrasında kullanıcıların isteklerine göre değişkenlik gösterecektir. Bu yüzden başlangıçta Master Detail Page’in Detail sayfası null olacaktır. Boş olduğu için ise bizim varsayılan olarak bir değer atamamız gerekir. Burada bunu yapıyoruz. Sonrasında ise bir fonksiyon oluşturuyoruz. Bu fonksiyonun ismini istediğiniz gibi değiştirebilirsiniz. Ben NavigateTo adında bir fonksiyon oluşturuyorum. Bu fonksiyon ile gideceğim sayfayı Detail sayfası yapıyorum. Böylece sürekli yanda kişisel bilgilerim ve diğer opsiyonlar bulunuyor.

public class RootPage
    {
        private static MasterDetailPage masterDetailPage { get; set; }
        public static MasterDetailPage MasterDetailPage
        {
            
            get
            {
                if (masterDetailPage == null)
                {
                    LocalUserManager localUserManager = new LocalUserManager();
                    var user = localUserManager.Listele().ToList()[0];
                    masterDetailPage = new MasterDetailPage();
                    masterDetailPage.Master = new AnaSayfaViews.AnaSayfaMaster(user);
                    NavigateTo(new AnaSayfaViews.AnaSayfaDetail(user));
                }

                return masterDetailPage;
            }
            set
            {
                masterDetailPage = value;
            }
        }

        public static void NavigateTo(Page page)
        {
            MasterDetailPage.Detail = new NavigationPage(page)
            {
                BarBackgroundColor = Color.Green,
                BarTextColor = Color.White,
            };
            MasterDetailPage.IsPresented = false;
        }
    }
}

Sizde dilerseniz bu yöntemi kullanabilirsiniz ya da önümüzde ki günlerde diğer yöntemi deneyebilirsiniz. Sorularınız olursa mail veya yorum atarak bana ulaşabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir