問題タブ [uiviewrepresentable]
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.
swift - SwiftUI: UIViewRepresentable の updateUIView() 関数が原因でアプリがフリーズし、CPU が急上昇する
SwiftUI にカスタム テキスト フィールドがあり、テキスト フィールドのコンテンツの量に応じて行数を調整します。アプリでは、ユーザーはテキスト フィールドを追加できるので、テキスト フィールドの高さと内容を配列に格納し、テキスト フィールドが追加されるたびに配列に追加します。
内のコードを削除するたびにupdateUIView()
、アプリはスムーズに実行されますが、もちろん、テキスト フィールドは表示されませんが、以下のコードのようにコードを含めるたびに、CPU が 99% に急上昇し、アプリがフリーズします ( 1 つのテキスト フィールドのみ)。
なぜこれが起こっているのか、そしてそれに対する修正を知っている人はいますか?
swift - SwiftUI: 独自の TextField を作成し、プログラムでコンテンツを変更する
次のチュートリアルで独自の TextField を作成しました: https://www.youtube.com/watch?v=9kfbJVqqTKc&t=17s。すべてが正常に機能しますが、TextField のコンテンツを更新する機能を追加しました。問題は、コンテンツをプログラムで設定すると、関数 textViewDidChange() がコーディネーターで呼び出されないことです。これにより、TextField 全体が折りたたまれます。つまり、何かを入力してもプレースホルダーが消えなくなり、自動的に大きくなりません。新しい行を作成する必要があるポイントに到達すると、何らかの理由でテキストが単純に削除されます。
この問題を解決する方法はありますか?
コード:
コーディネーター自体で textViewDidChange() 関数を呼び出すと、問題を解決できると思います。しかし、私はそれを行う方法がわかりません。
前もって感謝します
編集: カスタム TextField の実装方法:
編集2:私が見つけたと思います:
ビューが初めて表示されるとき:
-すべてがうまく機能します
最初のリセット後...
- キーボードボタン「リターン」で2番目のリセットを呼び出すと、テキストが通常の行より長くない場合に機能しますが、「通常」ボタンでリセットを呼び出すとまったく機能しません
- プレースホルダーが表示されなくなりました
- 入力したテキストが通常の行よりも長くなり、テキスト ボックスを大きくする必要がある場合、テキストが失われます