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.



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.



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.



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 |
}
|
2. UIAlertView
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.
UIAlertController
, UIViewController
'ı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.