2016-05-18 13 views
0

すべてのプロジェクトでインスタンスを使用します。私はoptionViewControllerでこれを試してみました

protocol OptionControllerDelegate: NSObjectProtocol { 
    func changeMapDisplayMode(controller: OptionController) 
} 
class OptionController: UIViewController { 

    weak var delegate: OptionControllerDelegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
    @IBAction func changeMapType(sender: AnyObject) { 
     delegate?.changeMapDisplayMode(self) 

    } 
} 

及びこれをtraceViewControllerに表示されませんでした。 私はchangeMapTypeボタンをタップするだけで何もしません... いくつかのアイデアはありますか? :/

+1

でデリゲートメソッドを実装します。

OptionControllerにデリゲートを追加しますか?画面はどのように見えますか?それは実際に画面の一部を所有する子ビューコントローラでなければなりませんか? – Wain

+0

私は地図と最初の画面があり、私はマップの種類を変更したい別の画面(オプション画面)を持っているので、地図を表示する最初の2つのビューコントローラと、このマップに従ってオプションの2番目の –

+0

MKMapViewの2つの別々のインスタンスを持って、デリゲートやプロパティ(例:マップの中心、現在のマップタイプなど)によって同様に見えるようにする変数を渡す方が良いでしょう。 ) – shim

答えて

1

ビューのインスタンスをアプリケーションの別の場所で共有することはお勧めできません。

複数のオプションがあります。

おそらく、OptionControllerTraceControllerにメッセージを送信できる代理人を使用するのが最善の方法です。

protocol OptionControllerDelegate { 
    func changeMapDisplayMode(...) 
} 

class OptionController: UIViewController { 
    ... 
    weak var delegate : OptionControllerDelegate 
    ... 
} 

をし、それを再利用するためのあなたの目的が何であるかをTraceController

class TraceController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate, OptionControllerDelegate { 
    ... 
    optionController.delegate = self // Do this on the instance of OptionController 
    ... 
    func changeMapDisplayMode(...) { 
     // Do stuff 
    } 
    ... 
} 
関連する問題