問題タブ [swiftui-environment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
345 参照

ios - 環境オブジェクトの更新によって同じビューがリロードされる場合、別の SwiftUI ビューに移動するにはどうすればよいですか

私が達成しようとしていること: 私は新しい SwiftUI 開発者です。シンプルなアドレス帳アプリを構築しようとしています。3 つのビューがあります。

  1. ContentView - リスト ビューにすべての連絡先を含むメイン ビューで、ナビゲーション ビューの上部に [連絡先の追加] ('+') と [編集] ボタンがあります。
  2. AddContact ビュー - 「名前」、「電子メール」テキスト フィールド、および「送信」ボタンがあります。
  3. DisplayContactDetails ビュー - この質問には関係ありません。

「Contact」オブジェクトの配列である環境オブジェクト「myContacts」を作成し、それを ContentView に渡して、アドレス帳のすべての連絡先を追跡しました。

ユーザーが AddContact ビューに移動し、名前と電子メールを追加して送信すると、環境オブジェクト "myContacts" が更新され、ユーザーが ContentView に戻って新しい連絡先のアドレス帳を表示できるようになります。含まれています。

問題:

ユーザーが AddContact ビューで [送信] を押すと、ユーザーを ContentView に戻すために作成したナビゲーション リンクが正しく呼び出されます。しかし、環境オブジェクト "myContacts" も送信によって更新されているため、すぐに ContentView から AddContact ビューに再び移動します。そのため、最初にナビゲーション リンクを実行しているように見えますが、myContacts の更新により AddContact ビューをリロードしています。

コード - コンテンツ ビュー:

コード - AddContactView

私が試したこと

.add メソッドをコメントアウトし、環境オブジェクトを更新しない場合、ContentView に戻るナビゲーションは期待どおりに機能します。だから私は、具体的には問題の原因であることを知っています.

ボタンに .onTapGesture 修飾子を追加して、そこに .add を呼び出してみました。

ビュー全体に .onDisappear 修飾子を追加して、そこに .add を呼び出してみました。

--これを解決するための助けや明確さは大歓迎です

編集:画面記録 - 最初のコメントに基づいて解決策を試す:

ソリューションを試すとどうなるか

奇妙な動作: 連絡先の自動ルートを追加しようとする最初の試みは、AddContactView に戻り、同じエラーが発生します。しかし、もう一度試してみると、ContactView に正しくルーティングされます。