SwiftUI는 사용자 정의 TextField에서 활성 / 비활성 선 색상을 전환합니다.

Aug 20 2020

나는 이 답변 에서 제안한대로을 TextField사용 하고 색상 을 변경하기 위해 a 를 추가 했지만 다른 뷰에 포함 된 구성 요소이므로 아래에 선이있는 을 만들려고합니다 .Divide.onTapGesture()Divider

내에 ContentView는 a Button와 my 가 있으며 a UnderscoredTextField안에 HStack포함되어 있으며 프로그래밍 방식으로 키보드를 닫을 수 있도록 Background구성 요소 ( 이 답변 에서 가져옴 ) 내부에 포함되어 있지만 @State var isActiveUnderscoredTextField때 내부 변수 를 변경할 수 있기를 바랍니다. 발생하지만 SwiftUI를 처음 사용하기 때문에 이것을 달성하는 방법을 잘 모르겠습니다.

import SwiftUI

struct ContentView: View {
    var body: some View {
        Background {
            UnderscoredTextField(phoneNumber: "")
        }.onTapGesture {
            self.hideKeyboard()
            //How to tell my UnderscoreTextField's isActive variable to change
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

import SwiftUI

struct UnderscoredTextField: View {
    @State var phoneNumber: String
    @State var isActive: Bool = false
    
    var body: some View {
        VStack {
            TextField("12345678", text: $phoneNumber)
                .keyboardType(.phonePad)
                .onTapGesture {
                    self.isActive = true
            }
            Divider()
                .padding(.horizontal)
                .frame(height: 1)
                .background(isActive ? Color.red : Color.gray)
        }
    }
}

struct UnderscoredTextField_Previews: PreviewProvider {
    static var previews: some View {
        UnderscoredTextField(phoneNumber: "12345678")
    }
}

키보드를 숨겼을 때의 모습이지만 다시 회색으로 바꾸고 싶습니다.

답변

1 Asperi Aug 20 2020 at 00:56

내가 올바르게 이해했다면 onEditingChanged아래와 같이 사용하기에 충분 합니다.

var body: some View {
    VStack {
        TextField("12345678", text: $phoneNumber, onEditingChanged: { self.isActive = $0     // << here !!
        }).keyboardType(.phonePad)
        Divider()
            .padding(.horizontal)
            .frame(height: 1)
            .background(isActive ? Color.red : Color.gray)
    }
}