Implementieren Sie Core Spotlight in einer SwiftUI-App
Teil 2 von 2
In Teil 1 dieser Serie haben wir die Grundlagen der Implementierung von Core Spotlight in Ihrer SwiftUI-App besprochen, einschließlich Indizierung, Löschung und Verarbeitung von Benutzereingaben.
In diesem letzten Teil werden wir fortgeschrittene Anwendungsfälle behandeln, darunter:
- Fortsetzung der Spotlight-Suche in der App
- Benutzerdefinierte Aktionen für Spotlight-Suchelemente
- Benutzerdefinierte Vorschau für Spotlight-Suchelemente
Zeigen Sie die Schaltfläche an
Zunächst müssen wir die Schaltfläche „In App suchen“ in der Spotlight-Suche nach den Ergebnissen unserer App anzeigen. Dazu müssen wir einfach den Schlüssel hinzufügen und ihn wie folgt auf JACoreSpotlightContinuation setzen :Info.plist
Danach muss die Schaltfläche „In App suchen“ in unseren Spotlight-Ergebnissen erscheinen.
Bitte beachten Sie: Möglicherweise müssen Sie Ihr Gerät neu starten, damit die Schaltfläche „In App suchen“ angezeigt wird.
Behandeln Sie die Eingabe
Wenn der Benutzer auf die Schaltfläche „In App suchen“ tippt, startet unsere App im Vordergrund und empfängt die Suchzeichenfolge des Benutzers, die wir dann verwenden können, um die Suche in der App fortzusetzen.
Die App empfängt die Spotlight-Suchzeichenfolge als NSUserActivity. Um sie abzurufen und zu verarbeiten, können wir den onContinueUserActivityModifikator verwenden. Wenden Sie es wie folgt auf die Hauptansicht Ihrer App an:
MainView()
.onContinueUserActivity(CSQueryContinuationActionType, perform: handleSpotlightSearchContinuation)
Innerhalb unserer Methode können wir die Suchzeichenfolge abrufen und gemäß der Architektur und dem Anwendungsfall der App wie folgt verwenden:
func handleSpotlightSearchContinuation(userActivity: NSUserActivity) {
guard let searchString = userActivity.userInfo?[CSSearchQueryString] as? String else {
return
}
// Continue spotlight search
// Use the search string as per your app's use-case
print(searchString)
}
Zeigen Sie die benutzerdefinierten Aktionen an
Um die benutzerdefinierten Aktionen in unseren Spotlight-Suchergebnissen anzuzeigen, müssen wir zwei Dinge tun.
Zuerst müssen wir die benutzerdefinierten Aktionen in der Info.plist unserer App hinzufügen. Wir können die Titelzeichenfolge, das Symbol (unter Verwendung des SF-Symbols) und eine Kennungszeichenfolge festlegen.
Als Nächstes müssen wir die Bezeichner für die benutzerdefinierten Aktionen, die wir hier festlegen, an CSSearchableItem übergeben, während wir Daten indizieren.
attributeSet.actionIdentifiers = [“CS_ACTION_1”, “CS_ACTION_2”]
Sehen Sie sich den Quellcode aus Teil 1 an, um auf die indexData-Methode zu verweisen.
Wenn wir jetzt lange auf unser Spotlight-Suchelement drücken, sollten wir unsere benutzerdefinierten Aktionen sehen.
Bitte beachten Sie: Wenn Ihre Daten bereits indiziert sind, müssen Sie sie aus Spotlight löschen und erneut indizieren, damit die benutzerdefinierten Aktionen angezeigt werden.
Behandeln Sie die benutzerdefinierten Aktionen
Wir behandeln die benutzerdefinierten Aktionen auf dieselbe Weise, NSUserActivitiywenn ein Spotlight-Suchelement unserer App angetippt wird.
Daher können wir die handleSpotlightzuvor (in Teil 1) definierte Methode so ändern, dass sie auch unsere benutzerdefinierten Aktionen verarbeitet. Die endgültige Version wird wie folgt aussehen:
func handleSpotlight(userActivity: NSUserActivity) {
// Get selected spotlight search item
guard let element = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String else {
return
}
// If custom action requested, execute it
if let actionIdentifier = userActivity.userInfo?[CSActionIdentifier] as? String {
if actionIdentifier == "CS_ACTION_1" {
// Perform action 1
} else if actionIdentifier == "CS_ACTION_2" {
// Perform action 2
}
}
// Else handle the element
// Maybe deep-link, or something else entirely
// This totally depends on your app's use-case
else {
self.selection = Int(element)
}
}
Danach prüfen wir, ob eine benutzerdefinierte Aktion getippt wurde, indem wir nach dem actionIdentifierWert suchen.
Wenn wir einen Wert erhalten, können wir die entsprechende Aktion ausführen. Wenn nicht, behandeln wir einfach das angezapfte Element.
3) Benutzerdefinierte Vorschau für Spotlight-Suchelemente
Wenn wir lange auf unsere Spotlight-Suchelemente drücken, um auf die benutzerdefinierten Aktionen zuzugreifen, sehen wir auch eine automatische Vorschau.
Diese automatisch generierte Vorschau ist ziemlich einfach, wir können diese Vorschau jedoch durch unsere eigene Ansicht ersetzen.
- Zunächst müssen wir das Ziel Quick Look Preview Extension zu unserer App hinzufügen. Gehen Sie zu ,
File > New > Targetum es hinzuzufügen, und geben Sie ihm einen Namen.
2. Suchen Sie als nächstes Info.plistinnerhalb des Ziels und stellen Sie den Schlüssel QLSupportsSearchableItemsauf JA.
3. Genau genommen benötigen wir für benutzerdefinierte Vorschauen für Spotlight-Suchelemente die PreviewProvider.swiftDatei im Ziel nicht und können sie löschen.
4. Kommentieren Sie in der PreviewViewController.swiftDatei die preparePreviewOfSearchableItemMethode aus. Wir können die Methode auch loswerden preparePreviewOfFile.
class PreviewViewController: UIViewController, QLPreviewingController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
func preparePreviewOfSearchableItem(identifier: String, queryString: String?, completionHandler handler: @escaping (Error?) -> Void) {
// Perform any setup necessary in order to prepare the view.
// Call the completion handler so Quick Look knows that the preview is fully loaded.
// Quick Look will display a loading spinner while the completion handler is not called.
handler(nil)
}
}
Wir können das Storyboard ändern, um die gewünschte benutzerdefinierte Vorschau zu erhalten, und es in der preparePreviewOfSearchableItemMethode mithilfe der Parameter konfigurieren:
identifier(die wir für jedes Element während der Indizierung festlegen)queryString(Spotlight-Suchzeichenfolge)
Wenn wir jetzt lange auf ein Spotlight-Suchelement unserer App drücken, erhalten wir eine benutzerdefinierte Vorschau wie diese:
Profi-Tipp: Verwenden Sie ein Paket, wenn Sie Daten/Logik zwischen Ihrer App und der Quick Look-Erweiterung teilen möchten.
Beispielsweise um zusätzliche Informationen über das Objekt mithilfe der Kennung zu erhalten.
Das vollständige Beispielprojekt finden Sie hier .
Vielen Dank fürs Lesen! Ich hoffe, Sie fanden diesen Beitrag hilfreich, einfach und interessant.

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































