Advertisement
  1. Code
  2. iOS SDK

iOS Temelleri: UIAlertView ve UIAlertController

Scroll to top
Read Time: 4 min

Turkish (Türkçe) translation by Alper Kayabasi (you can also view the original English article)

iOS yazılım geliştirme dünyasına sadece yeni adım atmış bile olsanız, muhtemelen UIAlertView hakkında bilginiz vardır.  UIAlertView gayet basit bir arayüze sahiptir ve modal uyarılar göstermek için kullanılır.

Fakat iOS 8 ile birlikte, Apple UIAlertView sınıfını yeniledi. Artık, action sheet ve modal uyarılar göstermek için UIAlertController sınıfının kullanımı tavsiye ediliyor. Bu kısa tutorial'da, size UIAlertView dan UIAlertController a geçiş yapmanın ne kadar kolay olduğunu göstereceğim.

1. Proje Kurulumu

Xcode 6.3+ uygulamasını açın ve Single View Application template'ini kullanarak yeni bir proje yaratın.

Choose the Single View Application TemplateChoose the Single View Application TemplateChoose the Single View Application Template

Projenin adını Alerts yapın, Dil olarak Swift seçin, cihaz olarak da iPhone seçin. Xcode'a projeyi nereye kaydetmek istediğinizi söyleyin ve Create diyin.

Configure the ProjectConfigure the ProjectConfigure the Project

Başlangıç olarak, bir alert view'ı tetikleyen buton ekleyelim. Main.storyboard u açın ve view controller'ın view'ı üzerine bir buton ekleyin. Butonun yazısını Show Alert olarak değiştirip, yerini sabitlemek için gerekli constraint'leri ekleyin.

Create a Simple User InterfaceCreate a Simple User InterfaceCreate a Simple User Interface

ViewController.swift dosyasını açıp sınıf implementasyonuna bir action ekleyin. Şu an için action'ın implementasyonunu boş bırakın. Main.storyboard a geri dönüp view controller'ın showAlert metodunu butonun Touch Up Inside event'i ile bağlayın.

1
@IBAction func showAlert(sender: AnyObject) {
2
    
3
}

2UIAlertView

UIAlertView sınıfını kullanarak basit bir uyarı göstererek başlayalım. Daha önce de bahsettiğim gibi, UIAlertView gayet basit bir görünüme sahip. Ufak tefek detaylarla biz uğraşmıyoruz, işletim sistemi kendisi hallediyor. showAlert metodunun son hali aşağıdaki gibi gözükecek.

1
@IBAction func showAlert(sender: AnyObject) {
2
    // Initialize Alert View

3
    let alertView = UIAlertView(title: "Alert", message: "Are you okay?", delegate: self, cancelButtonTitle: "Yes", otherButtonTitles: "No")
4
    
5
    // Configure Alert View

6
    alertView.tag = 1
7
    
8
    // Show Alert View

9
    alertView.show()
10
}

Oluşturma işlemi gayet basit. Başlık ve mesaj metni, delegate objesi, iptal butonu için bir başlık, ve eğer varsa diğer butonlar için başlık veriyoruz.

Oluşturma esnasında verdiğimiz delegate objesi, UIAlertViewDelegate protokolüne uymak zorunda. Mevcut view controller aynı şekilde alert view'ın delegate'i gibi davranacak. Bu yüzden ViewController sınıfımız da UIAlertViewDelegate protokolüne uymak durumunda.

1
import UIKit
2
3
class ViewController: UIViewController, UIAlertViewDelegate {
4
    ...
5
}

UIAlertViewDelegate metodları, opsiyonel olarak tanımlanmıştır. En sık olarak kullandığımız metod alertView(_:clickedButtonAtIndex:) Bu metod, kullanıcı alert view'ın herhangi bir butonuna bastığında tetiklenir. Aşağıda, alertView(_:clickedButtonAtIndex:) metodunun son halinin nasıl olması gerektiğini görebilirsiniz.

1
func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
2
    if alertView.tag == 1 {
3
        if buttonIndex == 0 {
4
            println("The user is okay.")
5
        } else {
6
            println("The user is not okay.")
7
        }
8
    }
9
}

Şimdi projeyi iOS Simulator kullanarak build edip çalıştıralım ve her şeyin gerektiği gibi olup olmadığını kontrol edelim.

3. UIAlertController

UIAlertController görünümü UIAlertView dan oldukça farklı, fakat bir kaç kez kullandıktan sonra Apple'ın neden UIAlertController kullanmayı teşvik ettiği mantıklı gelmeye başlıyor. Zamanla alışacağımız oldukça temiz bir görünümü var.

UIAlertController kullanmanın ilk avantajı, kullanıcı interaksiyonunu kontrol eden bir delegate protokolünün bulunmaması. Bu, bizim sadece showAlert metodumuzu biraz değiştirmemiz gerektiği anlamına geliyor. Metodumuzun aşağıdaki son haline bir göz atalım.

1
@IBAction func showAlert(sender: AnyObject) {
2
    // Initialize Alert Controller

3
    let alertController = UIAlertController(title: "Alert", message: "Are you okay?", preferredStyle: .Alert)
4
    
5
    // Initialize Actions

6
    let yesAction = UIAlertAction(title: "Yes", style: .Default) { (action) -> Void in
7
        println("The user is okay.")
8
    }
9
    
10
    let noAction = UIAlertAction(title: "No", style: .Default) { (action) -> Void in
11
        println("The user is not okay.")
12
    }
13
    
14
    // Add Actions

15
    alertController.addAction(yesAction)
16
    alertController.addAction(noAction)
17
    
18
    // Present Alert Controller

19
    self.presentViewController(alertController, animated: true, completion: nil)
20
}

Oluşturmak gayet kolay. Benzer şekilde bir başlık, mesaj metni, ve daha önemlisi UIAlertControllerStyle.Alert veya kısaca .Alert property'sine tercih ettiğimiz stili vermemiz gerekiyor. Tercih edilen stil, işletim sistemine alert controller'ın .ActionSheet olarak mı yoksa .Alert olarak mı gösterileceğini söylüyor.

Daha önceden her buton için bir başlık metni ve UIAlertViewDelegate protokolü ile kullanıcı interaksiyonunu kontrol ediyorduk. Şimdi bunun yerine direk alert controller'a action ekliyoruz. Eklediğimiz her action, UIAlertAction sınıfının bir örneği. Bir UIAlertAction oluşturmak gayet basit. Oluşturma metodu başlık metni, stil, bir de handler'a ihtiyaç duyar. Stil, UIAlertActionStyle tipinde olmalıdır. Handler ise, yalnızca UIAlertAction tipini kabul eder ve en son çağrılır.

Delegate protokol yerine handler kullanımı, modal alert'in implementasyonunu anlaşılması daha kolay ve temiz bir hale getirir. Bununla birlikte, eğer birden fazla modal alert ile çalışıyorsanız, artık alert view'lara tag vermeye gerek yok.

Kullanıcıya bir alert controller göstermeden önce, iki action'ı alertController'a addAction(_:) metodunu çağırarak ekleyebiliriz. Fakat modal alert'in butonlarının sırasının action'ların eklenme sırası ile belirlendiğini unutmamak gerekir. Action'ları hangi sırada eklediysek, butonlar da ona göre handle edilecektir.

UIAlertControllerUIViewController 'ın bir subclass'ı olduğundan, bunu kullanıcıya göstermek için presentViewController(_:animated:completion:) metodunu çağırmak yeterlidir. Temiz.

4. UIActionSheet

Beklendiği gibi, Apple ayrıca UIActionSheet sınıfını ve UIActionSheetDelegate protokolünü de yeniledi. iOS 8 ile birlikte, artık kullanıcılara action sheet göstermek için de UIAlertController kullanılması öneriliyor.

Bir action sheet göstermek ise modal alert göstermek ile neredeyse aynı şekilde. Aradaki tek fark preferredStyle property'si, ki bu durumda UIAlertControllerStyle.ActionSheet veya direk .ActionSheet olarak tanımlamamız gerekiyor.

Sonuç

UIAlertView ve UIActionSheet iOS 8 ile birlikte yenilenmiş olsa da, yakın gelecekte onları kullanmaya devam edebilirsiniz. UIAlertController'ın arayüzü ise yok sayması zor bir yenilik. Modal alert ve action sheet kullanımını basitleştiriyor ve tek bir sınıf altında birleştiriyor. Ve UIAlertController aynı zamanda bir UIViewController alt sınıfı olduğu için, API kullanımı da oldukça tanıdık.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.