TipKit-Tipps werden bei Verwendung in der iOS 16+-App mehrfach angezeigtIOS

Programmierung für iOS
Anonymous
 TipKit-Tipps werden bei Verwendung in der iOS 16+-App mehrfach angezeigt

Post by Anonymous »

Meine App ist iOS 16+. Für alle Benutzer von iOS 17+ möchte ich TipKit verwenden, um Nutzungshinweise anzuzeigen.
Basierend auf einigen Tutorials habe ich das folgende Setup mit einem Dummy-Protokoll erstellt, um popupTip ohne iOS 16-Kompilierungsfehler verwenden zu können (siehe unten)
Obwohl dies im Allgemeinen funktioniert, werden Tipps mehrmals angezeigt. Wenn ich die Apple-Dokumente jedoch richtig verstehe, sollte dies nicht passieren. Jeder Tipp sollte nur einmal angezeigt werden.
Bei der Verwendung von mehr als einem Tipp wird jedoch der letzte Tipp immer wieder angezeigt, sobald die entsprechende Ansicht sichtbar wird (ohne Verwendung von resetDatastore()).
Liegt das daran, dass ich das Dummy-Protokoll verwende? Oder mache ich generell etwas falsch?

Vollständige Einrichtung:

Code: Select all

/// Protocol for ensuring compatibility.
/// Enables tips to be passed and stored as properties without availability issues.
@available(iOS, obsoleted: 17, message: "This will be removed once we only support iOS 17+")
public protocol TipSupport {
@available(iOS 17, *)
var tip: AnyTip { get }
}

@available(iOS 17, *)
public extension Tip where Self: TipSupport {
var tip: AnyTip { AnyTip(self) }
}

public extension View {
/// Helper for making the `popupTip` modifier available for iOS  some View {
if #available(iOS 17, *), let tip = tipSupport?.tip {
self.popoverTip(tip, arrowEdge: arrowEdge)
} else {
self
}
}
}
Jetzt kann ich Tipps in meinem Code verwenden:

Code: Select all

struct TipTestView: View {
// let sampleTip = SampleTip()

var body: some View {
Text("Hello, World!")
.popupTip(SampleTip())
//.popupTip(sampleTip) // no difference
}
}

struct SampleTip: Tip, TipSupport {
var id: String { "SampleTip" }

var title: Text {
Text("Some Title")
}

var message: Text? {
Text("More information")
}

var image: Image? {
Image(systemName: "hand.tap")
}
}
TipKit ist in meinem App-Setup konfiguriert:

Code: Select all

.task {
if #available(iOS 17, *) {
#if DEBUG
//try? Tips.resetDatastore()
#endif

try? Tips.configure([
.datastoreLocation(.applicationDefault),
.displayFrequency(.immediate)
])
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post