Spotlightホームインタフェースのドロップダウン後に検索

2901 ワード

  • エンジニアリング-General-Linked Frameworks and LibrariesにCoreSpotlightとMobileCoreServicesフレームワークを追加することで、CSSearchableItemを使用したプロパティ
  • を使用できます.
    2.属性1)を設定.searchableItems
    var searchableItems = [CSSearchableItem]()
    

    2). searchableItemAttributeSetのプロパティの設定
    //検索欄の1つをクリックすると、コールバックでuniqueIdentifierがもらえます
     let searchableItem CSSearchableItem(uniqueIdentifier: "com.appcoda.SpotIt.\(i)", domainIdentifier: "movies", attributeSet: searchableItemAttributeSet)
    

    3). searchableItems.append(searchableItem)
    すべてのコード:
        var searchableItems = [CSSearchableItem]()
        for i in 0...(moviesInfo.count - 1) {
            
            let movie = moviesInfo[i] as! [String: String]
            let searchableItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
            
            //set the title
            searchableItemAttributeSet.title = movie["Title"]!
            
            //set the image
            let imagePathParts = movie["Image"]!.componentsSeparatedByString(".")
            searchableItemAttributeSet.thumbnailURL = NSBundle.mainBundle().URLForResource(imagePathParts[0], withExtension: imagePathParts[1])
            
            // Set the description.
            searchableItemAttributeSet.contentDescription = movie["Description"]!
            
            var keywords = [String]()
            let movieCategories = movie["Category"]!.componentsSeparatedByString(", ")
            for movieCategory in movieCategories {
                keywords.append(movieCategory)
            }
            
            let stars = movie["Stars"]!.componentsSeparatedByString(", ")
            for star in stars {
                keywords.append(star)
            }
            
            searchableItemAttributeSet.keywords = keywords
            
            let searchableItem = CSSearchableItem(uniqueIdentifier: "com.appcoda.SpotIt.\(i)", domainIdentifier: "movies", attributeSet: searchableItemAttributeSet)
            
            searchableItems.append(searchableItem)
            
            CSSearchableIndex.defaultSearchableIndex().indexSearchableItems(searchableItems) { (error) -> Void in
                if error != nil {
                    print(error?.localizedDescription)
                }
            }
        }
    

    4.コールバック
     override func restoreUserActivityState(activity: NSUserActivity) {
        
        if activity.activityType == CSSearchableItemActionType {
            if let userInfo = activity.userInfo {
                //CSSearchableItemActivityIdentifier     uniqueIdentifier
                let selectedMovie = userInfo[CSSearchableItemActivityIdentifier] as! String
                selectedMovieIndex = Int(selectedMovie.componentsSeparatedByString(".").last!)
                performSegueWithIdentifier("idSegueShowMovieDetails", sender: self)
            }
        }
    }