2016-03-24 8 views
0

Also habe ich den Standort in meiner App implementiert.locationManager didUpdateLocation, ändere UIElements in einer anderen Klasse swift

Ich habe eine Klasse erstellt mit handles die location Zeug, ich benutze locationManager didUpdateLocations, um zu wissen, wenn ein Ort gefunden wird. Was ich erreichen muss, ist das Bild auf einer Schaltfläche zu ändern und einen activityIndicator in einer anderen Klasse (viewController) zu stoppen.

Ich habe versucht, eine Instanz der ViewController in meiner LocationClass zu verwenden, aber es ist fehlgeschlagen und hat Nil zurückgegeben.

Hat jemand einen guten Weg, dies zu erreichen? Ich würde denken, ich brauche eine Instanz von meinem ViewController, aber ich habe es versäumt, dies zu tun. Übrigens funktioniert das Location-Zeug!

Edit: Dank Naomimichiko habe ich es geschafft. Ich habe eine Antwort hinzugefügt, die erklärt, wie.

Antwort

2

Klingt, als ob Sie vielleicht Ihr eigenes Protokoll schreiben möchten, das einen Methodenaufruf in didUpdateLocations auslöst, um Ihre andere Klasse darüber zu informieren.

+0

Ich werde das jetzt versuchen. Gibt später Feedback. – Starlord

+0

Arbeitete wie ein Charme! Ich werde meine Frage aktualisieren, um andere wissen zu lassen, wie man es macht – Starlord

0

Sie können an delegate oder NSNotification denken, um andere zu benachrichtigen, wenn der Standort aktualisiert wurde.

1

Dank Naomimichiko habe ich ein Protokoll gemacht, das behandelt, was ich brauchte! Hier ist, wie ich es gemacht habe:

Ich erstellte zuerst eine Datei mit dem Namen: 'protocols.swift'. Dabei erklärte ich mein Protokoll:

@objc protocol LocDelegate{ 
optional func locationFound() 
} 

in der Lage Klasse Hexe übernimmt die Position Sachen, die ich hinzugefügt:

var delegateLoc: LocDelegate? 

ich die func Location didUpdateLocaton in der Lage Klasse haben und dort habe ich dies:

Dies wird dann die Funktion "ausführen", wenn es eine Klasse gibt, die darauf hört.

In meinem Viewcontroller, wo ich die Etiketten zu aktualisieren und Scheiße ich hinzugefügt, um das Protokoll zu der Klasse wie folgt:

class ViewController: UIViewController, LocDelegate 

Dann in viewDidLoad ich den Delegierten selbst gesetzt.

let locatonClass = locationClass() 
locatonClass.delegateLoc = self 

Was übrig bleibt, ist nur die func hinzuzufügen, die das Protokoll benötigt:

func locationFound() { 
    self.hereIAm.setImage(UIImage(named: "loc1.png"), forState: .Normal) 
    self.activityIndicator1.stopAnimating() 
} 

, dass es ... Es war wirklich einfach, aber so hart, um herauszufinden, wie dies zu erreichen. Lesen Sie mehr über benutzerdefinierte Protokolle hier: Custom Protocols

+0

nett! Sorry meine Antwort war nicht super beschreibend aber klingt wie du es hast. – naomimichiko