Die Schaltfläche WKInterface ändert den Titel nicht

8

Ich versuche, den Titel einer Schaltfläche zu ändern, nachdem ich von einer Benachrichtigung zurückrufe, aber sie antwortet überhaupt nicht. Ich überprüfte, dass es nicht null ist und überprüfte den Text, der 'zuweist und alles ist gut. Ich habe den Eigenschaftstyp strong anstelle von weak gemacht, aber keinen Erfolg.

%Vor%     
Ali 02.04.2015, 07:20
quelle

4 Antworten

4

Wenn mit WatchKit ein Benutzeroberflächenelement derzeit nicht sichtbar ist, kann es nicht aktualisiert werden. Wenn Sie also einen anderen Schnittstellen-Controller "on top" präsentiert haben, können Sie keine der Schnittstellenelemente des präsentierenden Controllers aktualisieren, bis Sie den präsentierten Controller geschlossen haben. An diesem Punkt können Sie den präsentierenden Controller in der Methode 'willeActivate' sicher aktualisieren.

Die Methode von SushiGrass zum Übergeben von Blöcken ist sicherlich ein gültiger Ansatz. Bei meinen Tests musste ich jedoch mehrere Blöcke verwalten, und viele der nachfolgenden Blöcke haben umgekehrt, was zuvor blockierte Blöcke erreicht hatten (z. B. zuerst den Text eines Labels in "foo", dann "bar", dann "foo "wieder. Während dies funktionieren kann, ist es nicht optimal.

Ich schlage vor, dass jeder, der an einer WatchKit-App arbeitet, sich einen Moment Zeit nimmt, um zu überlegen, wie er nicht-sichtbare (also nicht gerade sichtbare) Oberflächenelemente berücksichtigen möchte. willActivate ist dein Freund, und es lohnt sich, einen Weg zu finden, Updates auf diese Weise zu verwalten, wenn du von Controller zu Controller wechselst.

Für was es wert ist, habe ich viel von dieser Logik in einer JBInterfaceController Unterklasse gekapselt, die eine Menge davon für Sie erledigt. Wenn Sie dies als Basisklasse für Ihren eigenen Schnittstellencontroller verwenden, können Sie einfach Ihre Elemente in der hinzugefügten didUpdateInterface -Methode aktualisieren. Leider hatte ich noch nicht die Zeit, um die richtige Dokumentation zu schreiben, aber die Header-Dateien und das Beispielprojekt sollten dich auf den richtigen Weg bringen: Ссылка

    
Mike Swanson 22.04.2015, 16:02
quelle
3

Ich benutze den neuesten Xcode 6.3 und den Code unter mir. self.testBtn ist bind mit Storyboard und dessen WKInterfaceButton

Ich habe auch einen Screenshot mit betroffenem Ergebnis beigefügt.

Ich setze ersten Text in - (void)willActivate

%Vor%

    
iBapu 16.04.2015 13:20
quelle
2

Wenn Sie ein IBOutlet für die Eigenschaft fromButton verwenden, stellen Sie sicher, dass es wie folgt mit WKInteface im Storyboard verbunden ist:

    
Andr3a88 02.04.2015 07:50
quelle
2

Ich habe diese Art von Problem gelöst, indem ich ein Modellobjekt mit einer Eigenschaft vom Typ () -> (Void) (in swift) erstellt habe. Ich erstelle das Modellobjekt, setze die Aktion in dem Block, den ich nach Abschluss des Pushing WKInterfaceController ausführen möchte, und übergebe dieses Modellobjekt im Kontext schließlich an den gepushten WKInterfaceController . Das pushed WKInterfaceController enthält einen Verweis auf das Modellobjekt als Eigenschaft und ruft es als Abschlussblock auf, wenn es fertig ist und nach func popController() .

Dies funktionierte bei mir für Muster wie das, was Sie beschreiben, zusammen mit dem Entfernen von Zeilen beim Löschen von Detail-Controllern, Netzwerkaufrufen, Standortabrufen und anderen Aufgaben.

Sie können sehen, worüber ich hier spreche: Ссылка

    
SushiGrass Jacob 20.04.2015 21:21
quelle