Closed7

[SwiftUI]TextViewの実装をする

ほへとほへと

以下を読む。

https://developer.apple.com/documentation/swiftui/texteditor


概要

長い形式のテキストを表示および編集できるビュー。

@MainActor @preconcurrency
struct TextEditor

テキスト エディター ビューを使用すると、アプリのユーザー インターフェースで複数行のスクロール可能なテキストを表示および編集できます。テキスト エディターを作成するには、ビューの本体に TextEditor インスタンスを追加し、アプリ内の文字列変数に Binding を渡して初期化します。

struct TextEditingView: View {
    @State private var fullText: String = "This is some editable text..."

    var body: some View {
        TextEditor(text: $fullText)
            .foregroundColor(Color.gray)
            .font(.custom("HelveticaNeue", size: 13))
            .lineSpacing(5)
    }
}
ほへとほへと

プレースホルダーの実装は以下が良さそう?

https://blog.code-candy.com/swiftui_texteditor/#i-8


/// TextEditorにプレースホルダーを追加する
TextEditor(text: $inputText)
    .frame(width: 400, height:150)
    .border(.gray, width: 5)

    .overlay(alignment: .topLeading) {
        // 未入力の時、プレースホルダーを表示
        if inputText.isEmpty {
            Text("ここに文字を入力してください。")
                .allowsHitTesting(false) // タップ判定を無効化
                .foregroundColor(Color(uiColor: .placeholderText))
                .padding(6)
        }
    }

実際にやって見たけど、微妙にズレるの嫌だな。

Paddingを何もつけない場合でも少し隙間がある感じで、ここら辺をいい感じに調整してあげればOK

ほへとほへと

文字数制限をつける実装をしたのでメモ。

        TextEditor(text: $text)
            .padding(16)
            .overlay(alignment: .topLeading) {
                if text.isEmpty {
                    Text("応援コメントを投稿してみよう!")
                        .configureTextStyle(
                            textSize: 14,
                            foregroudColor: Color(Asset.Colors.gk160.color)
                        )
                        .allowsHitTesting(false)
                        .padding(.top, 25)
                        .padding(.leading, 23)
                }
            }
            .onChange(of: text) {
                if $0.count > characterLimit {
                    text = String($0.prefix(characterLimit))
                }
            }
このスクラップは4ヶ月前にクローズされました