2017-03-09 10 views
0

私はチップの電卓を構築しようとしているiOSアプリケーション開発の初心者です。アプリの基本的な機能が完了しました。私のメインストーリーボードには、10,20,30などの3%値を表示するセグメントコントロールがあります。クリックすると新しいページに移動し、同様の%値がセグメントコントロールに表示される設定ボタンがあります。SettingsViewコントローラからメインボードにデータを渡す - Swift

私がしたいのは、数値がクリックされると(セグメント)、それはデフォルトのtip%valueとして保存されるべきです。チップ量を計算するための関数を書いたメインストーリーボード関数に、この値をどのように渡すべきですか?

答えて

0

私はあなたが他のビューに移動するためのセグエを使用していると仮定し、そのprepareForSegueメソッドを使用します。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "tipSegue" 
    { 
     if let destinationVC = segue.destinationViewController as? OtherViewController { 
      destinationVC.tipPercent = someValue 
     } 
    } 
} 
+0

ありがとう!私は以下の行を使用し、値が渡されていません: オーバーライドfuncの準備(segue:UIStoryboardSegue、送信者:Any?){ if segue.identifier == "showSettings" { settingsVC:SettingsViewController = segue.destinationとして! SettingsViewController settingsVC。代理人=自己 } } –

0

あなたは、デフォルトの割合を設定するためのを書き、そしてあなたのMainViewControllerは、そのプロトコルに準拠することができます。ユーザーがSettingsViewControllerのボタンをタップすると、プロトコル内で定義された関数を呼び出して、 "代理人"(MainViewController)に何が起こったかを知らせ、それに応じてdefault変数を設定することができます。これが永続的な設定である場合は、UserDefaultsを使用する方が良いかもしれません。次に、MainViewControllerをロードすると、UserDefaults変数にアクセスすることができます(存在する場合)。

少しのプロトコルのヘルプ:

あなたのプロトコルが非常に簡単に定義できる - このような何かを(これはあなたのviewControllersの外側で宣言する必要があります - 私は、多くの場合、関連のViewControllerのクラス宣言の上にそれを行います)。

protocol SettingsDelegate { 
    func didUpdateDefaultTipPercent(to percent: Float) 
} 

他の機能を必要としない限り、これはプロトコル宣言のためのものです。その関数の機能を実際には定義していないことに注意してください。プロトコルに準拠する各viewControllerはそれとは異なる定義を持つことがあります。

weak var settingsDelegate: SettingsDelegate? 

と、ユーザは、あなたが安全に、デリゲートが存在するかどうかを確認し、その新しいを渡すことができ、デフォルトの割合を選択した後:

次に、あなたのsettingsViewControllerであなたは、このようなプロトコルコンフォーマーのためのオプションの変数を持っているかもしれませんそのようなデリゲートの数:あなたのMainViewController

if let delegate = self.settingsDelegate { 
    delegate.didUpdateDefaultTipPercent(to: 15.0) //this "15.0" will come from your segmented control action or whatever 
} 

、中にあなたのprepareFor(segue...あなたが設定しようとしているかどうかを確認する必要がある、とdelegaとしてMainを設定しますTE:

... 
if let settings = segue.destination as? SettingsViewController { 
    settings.settingsDelegate = self 
} 

そして、最後に、あなたはあなたのMainViewControllerがプロトコルに準拠するようにする必要があります。私は通常、これを簡単に見つけやすくし、他のものから分離しておくために、拡張機能としてこれを行います:

extension MainViewController: SettingsDelegate { 
    func didUpdateDefaultTipPercent(to percent: Float) { 
     self.defaultPercentage = percent 
    } 
} 
+0

ありがとうございました!はい、私はUserDefaultsを使用しようとしています。しかし、プロトコルと代理人の使い方は分かりません。どんな助け? –

+0

@NinjaCowgirl OK、私は編集で完全な実装を追加しました。上記を参照。結局のところ、これが永続的な設定であれば、UserDefaultsが道のりです。そのような場合は、実際にプロトコルは必要ありませんが、理解し実装することは非常に貴重なことです。 – creeperspeak

+0

ありがとう!私はこれをチェックします。 –