Tab View Controllerを中心に構築されたiOSアプリケーションで作業しています。 「連絡先」タブを作成しました。ここで、ユーザーはリストから連絡先を見つけて選択できます。ユーザーが連絡先を選択すると、連絡先の名前が使用され、別のタブにその連絡先の名前が渡されます。その機能は次のように行われています。Tab View ControllerでSegueが値を保持し続ける
これまでのように(テキストフィールドに名前が読み込まれていれば)すべて動作します。私の問題は、タブを変更してから[ホーム]タブに戻るたびに値が戻ってくるようです。たとえば、連絡先から「John」を選択すると、「ホーム」タブに移動し、Johnの名前をテキストフィールドに入力します。名前の最後の2文字を削除したとしましょう。今は "Jo"です。別のタブを読み込んで戻ると、名前フィールドが「John」にリセットされました。これは、ホームタブを開くたびに値が再渡されるかのようです。また、名前を渡した後にホームタブを読み込むたびに、私のコンソールに「Name Passed:John」と表示されるので、タブが表示されるたびにこれが処理されていることがわかります。
var passedName: String!
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
//Checks if name was passed to controller
if let validName = passedName {
print("Name passed: \(validName)")
nameTextField.text = validName
}
}
私はデータを間違って渡していますか?私は、上記のコードをviewWillAppearメソッドで呼び出されているが、本質的にデータが[連絡先]タブから一度だけ渡されているので意味がありません。ありがとう!
ありがとう!ただし、passedName値を更新すると、タブを変更して戻ったときにオーバーライドされませんか? viewDidLoadにコードを配置すると、これが変わる可能性がありますか? – JD2017
いいえ、viewDidLoadに入れないでください。なぜなら、そのタブに戻るたびに呼び出されるわけではないからです。 UiTextFieldを変更すると、viewWillAppearになり、passedNameを更新し続けます。 –
Rightが、ホームタブをロードするたびにpassedNameが更新されます。だから私はそれを変更し、値を更新するかどうかにかかわらず、私はタブを切り替えて戻ってくると、それはパス値によってオーバーライドされます – JD2017