Press ESC to close

Xamarin Forms iOS Toast Mesaj

Daha önce ki yazımda Android için nasıl toast mesaj oluşturacağımızı anlatmıştım. Bu yazımda ise internette pek fazla bulunmayan bir konuya değineceğim. Aslında toast mesaj oluşturmak için bir çok nuget paketi mevcut lakin görünümleri veya çıktıları hoşunuza gitmeyebilir. Bu yüzden kendi yazdığımız toast mesajı daha cazip geliyor.

Öncelikle Android’e yaptığımız gibi iOS içinde bu işlemleri Dependency Service yardımıyla yapacağız. İlk olarak projemizin portable katmanında bir interface oluşturmamız gerekiyor. Bu interfaceden kalıtım aldığımız sınıflarda iki işlem yapacağız. Bunlarda ilki toast mesajı uzun olarak ekranda göstermek, ikincisi ise süre olarak kısa bir zamanda ekranda göstermek olacak.

public interface IMessage
    {
        void UzunMesaj(string mesaj);
        void KisaMesaj(string mesaj);

    }

Bir interface oluşturduktan sonra projemizin iOS kısmına geliyoruz. Burada bir sınıf açıp portable katmanında oluşturduğumuz IMessage interfaceinden kalıtım almamız gerekiyor. Kalıtım aldıktan sonra interfacede ki fonksiyonları sınıfa implemente etmemiz gerekiyor. Burada yaptıklarımızı açıklamak gerekirse; ilk olarak uzun ve kısa süreli toast mesajlar oluşturacağımız için sabit süreler belirledik. Bunlar 3,5 sanıye ve 2 saniye olmak üzere. Siz bunları istediğiniz gibi ayarlayabilirsiniz. Sonrasında ise zamanı saymak için bir Timer oluşturuyoruz ve ardından ekranda mesajı belirtmek için UIAlert sınıfından bir nesne oluşturuyoruz. İstediğimiz mesajı ekrana basmak için MesajBas adında bir fonksiyon oluşturuyoruz. Bu fonksiyonda mesaj ve süre olmak üzere dışarıdan iki farklı değişken alıyor. Fonksiyonda ilk olarak süreyi kontrol ediyoruz. Eğer süre bitmişse ekrandan çekiyoruz mesajı. Bu kontrolü yaptıktan sonra mesajı ekrana basıyoruz. Tabi bu snıfın bir dependency service olduğunu da belirtmemiz lazım. Sınıfın üstünde belirttikten sonra iOS için toast mesajımızda hazır.

[assembly:Xamarin.Forms.Dependency(typeof(iOSMesaj))]
namespace iOS.ConnectionHelper
{
    public class iOSMesaj : IMessage
    {
        const double LONG_DELAY = 3.5;
        const double SHORT_DELAY = 2.0;

        NSTimer alertDelay;
        UIAlertController alert;

        // Kısa mesaj basıyoruz
        public void KisaMesaj(string mesaj)
        {
            MesajBas(mesaj, SHORT_DELAY);
        }

        // Uzun mesaj yazdırıyoruz
        public void UzunMesaj(string mesaj)
        {
            MesajBas(mesaj, LONG_DELAY);

        }

        void MesajBas(string mesaj, double sure)
        {
            alertDelay = NSTimer.CreateRepeatingScheduledTimer(sure, (obj) =>
              {
                  MesajReddet();
              });
            alert = UIAlertController.Create(null, mesaj, UIAlertControllerStyle.Alert);

            UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(alert, true, null);

        }

        void MesajReddet()
        {
            if (alert!=null)
            {
                alert.DismissViewController(true, null);

            }
            if (alertDelay!=null)
            {
                alertDelay.Dispose();
            }
        }

        
    }

Şimdi geriye kalan şey ise bunu denemek olacak. Bir sayfa oluşturup buraya buton atıyorum. Bu butona basınca ise ekrana toast mesajı basmasını sağlayacağım.

void buttonBas_Clicked(object sender,EventArgs e)
        {
            DependencyService.Get<IMessage>().UzunMesaj("Uzun mesajdır");

        }

Sayfanın ekran görüntüsü aşağıdaki gibidir.

Eğer sorularınız olursa mail veya yorum atarak bana ulaşabilirsiniz. İyi çalışmalar.

Bir yanıt yazın

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