iOS 9'daki en önemli eklemelerden biri, uygulamaların iOS sistem genelinde arama özelliği olan Spotlight ile çift yönlü iletişim kurabilmesiydi. Bunun anlamı, uygulamalar, içeriklerinin Spotlight arama sonuçlarında gösterilmesini isteyebilir ve kullanıcı bu arama sonuçlarından birine dokunursa, uygulama başlatılır ve doğru içeriği yükleyebilmesi için neye tıkladığı söylenir.
Storyboard üzerinden 3 adet view controller oluşturalım ve bu view controller’ların storyboardid’lerini sırasıyla Screen1, Screen2 ve Screen3 olarak tanımlayalım.
Kod tarafında nasıl yapacağımıza geçelim.
1 - Index işlemi
Öncelikle uygulamada ilk açılan ekranın controller dosyasına aşağıdaki 2 adet kütüphaneyi ekliyoruz.
import CoreSpotlight
import MobileCoreServices
Daha sonra aşağıdaki struct modelimizi yaratıyoruz.
struct SpotlightModel {
var id: String // App delegate dosyamızda kontrol edeceğimiz id bilgisi
var title: String // Spotlight search kısmında uygulama adı kısmı
var content:String: String // Spotlight search kısmında uygulama açıklama kısmı
var keywords:[String] // Spotlight search kısmında arandığında çıkmasını istediğimiz kelimeler
}
|
Modelimizi yarattıktan sonra bu modelden oluşturulan bir array oluşturuyoruz.
var matches:[SpotlightModel] = [SpotlightModel]()
|
Aşağıdaki metod ile indexleme işlemini yapıyoruz.
func indexSearchableItems(){
// add search items
let screen1 = SpotlightModel(id: "1", title: "Bayri", content: "Screen 1", keywords: ["screen 1, screen1"])
let screen2 = SpotlightModel(id: "2", title: "Bayri", content: "Screen 2", keywords: ["screen 2, screen2"])
let screen3 = SpotlightModel(id: "3", title: "Bayri", content: "Screen 3", keywords: ["screen 3, screen3"])
matches.append(screen1)
matches.append(screen2)
matches.append(screen3)
var searchableItems = [CSSearchableItem]()
for match in matches {
let searchItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
searchItemAttributeSet.title = match.title
searchItemAttributeSet.contentDescription = match.content
searchItemAttributeSet.keywords = match.keywords
let searchableItem = CSSearchableItem(uniqueIdentifier: match.id, domainIdentifier: "matches", attributeSet: searchItemAttributeSet)
searchableItems.append(searchableItem)
}
CSSearchableIndex.default().indexSearchableItems(searchableItems) { (error) -> Void in
if error != nil {
print(error?.localizedDescription ?? "Error")
}
}
}
|
2 - Indexlenen ekranın açılma işlemi
AppDelegate.swift dosyanıza import CoreSpotlight ekleyin.
Ardından aşağıdaki metodu Spotlight Search kısmından dönen değeri karşılamak için AppDelegate.swift dosyamıza ekliyoruz.
Kod içerisindeki uniqueIdentifier değişkeni yukarıda indexlemiş olduğumuz bilgidir. Bu değere göre açmamız gereken sayfayı açıyoruz.
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == CSSearchableItemActionType {
if let uniqueIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
if(uniqueIdentifier == "1"){
let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homePage = mainStoryboard.instantiateViewController(withIdentifier: "Screen1") as! Screen1ViewController
self.window?.rootViewController = homePage
}else if(uniqueIdentifier == "2"){
let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homePage = mainStoryboard.instantiateViewController(withIdentifier: "Screen2") as! Screen2ViewController
self.window?.rootViewController = homePage
}else if(uniqueIdentifier == "3"){
let mainStoryboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homePage = mainStoryboard.instantiateViewController(withIdentifier: "Screen3") as! Screen3ViewController
self.window?.rootViewController = homePage
}
window?.makeKeyAndVisible()
}
}
return true
}
|
Uygulamamız kullanıma hazır.