あなたは、デフォルトの割合を設定するためのを書き、そしてあなたの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
}
}
ありがとう!私は以下の行を使用し、値が渡されていません: オーバーライドfuncの準備(segue:UIStoryboardSegue、送信者:Any?){ if segue.identifier == "showSettings" { settingsVC:SettingsViewController = segue.destinationとして! SettingsViewController settingsVC。代理人=自己 } } –