2016-03-24 7 views
0

私は自分のアプリで位置情報を実装しました。locationManager didUpdateLocation、別のクラスのUIElementsを変更する

私は場所のものを扱うクラスを作成しました。locationManager didUpdateLocationsを使用して、場所が見つかったときを知りました。 私が達成する必要があるのは、ボタンの画像を変更し、別のクラス(viewController)のactivityIndi​​catorを停止することです。

locationClassで使用するviewControllerのインスタンスを取得しようとしましたが、失敗してnilが返されました。

誰でもこれを達成する良い方法はありますか? viewControllerのインスタンスを取得する必要があると思いますが、失敗しました。場所のものが働いています。

編集: 私のおかげで、私はそれをやりました。方法を説明する回答を追加しました。

答えて

2

他のクラスに知らせるためにdidUpdateLocationsのメソッド呼び出しを起動する独自のプロトコルを記述したいと思うかもしれません。

+0

ここで試してみます。後でフィードバックを与えます。 – Starlord

+0

チャームのように働いた!私は他の人にそれを行う方法を知らせるために私の質問を更新します – Starlord

0

delegateまたはNSNotificationは、場所が更新されたときに他の人に通知すると考えることができます。

1

私はnaomimichikoのおかげで、私は必要なものを処理するプロトコルを作った! ここで私はそれをしました:

私はまず 'protocols.swift'という名前のファイルを作成しました。これで私は自分のプロトコルを宣言した:場所クラスの魔女で

@objc protocol LocDelegate{ 
optional func locationFound() 
} 

は、私が追加場所のものを処理します。

var delegateLoc: LocDelegate? 

私は場所クラスでFUNC locationManager didUpdateLocatonを持っており、そこに私はこれをしませんでした:

delegateLoc?.locationFound!() 

これは、これでリッスンするクラスがある場合、関数を「実行」します。

class ViewController: UIViewController, LocDelegate 

はその後のviewDidLoadで、私は自分にデリゲートを設定します。私はラベルを更新する必要があるとたわごと私はそうのようなクラスにプロトコルを追加しました私のViewControllerで

。これを実現する方法を見つけ出すことは本当にシンプルですがとても大変でした...

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

それだ:残っているもの

let locatonClass = locationClass() 
locatonClass.delegateLoc = self 

はちょうどプロトコルが必要FUNCを追加することです。 カスタムプロトコルの詳細については、こちらをご覧ください。Custom Protocols

+0

素敵な!申し訳ありませんが私の答えは非常に説明的ではなかったが、あなたはそれを持っているように聞こえる。 – naomimichiko

関連する問題