SwiftUI에서 ViewBuilder를 사용하여 사용자 정의보기 / 구성 요소에서 콘텐츠를 Text ()로 제한하는 방법

크리스 데 노폴

SwiftUI를 사용하여 사용자 지정 구성 요소를 만들었습니다. 텍스트 필드와 유사한 드롭 다운 목록과 비슷하지만 탭하면 옵션 목록이 포함 된 시트가 표시됩니다. 선택기의 코드는 다음과 같습니다.

struct PickerWidget<Content: View>: View{
var action: () -> Void
private let content: () -> Content

init(action: @escaping () -> Void, @ViewBuilder content: @escaping () -> Content) {
    self.content = content
    self.action = action
}

var body: some View {
    Button(action: {
        self.action()
    })
    {
        HStack{
            content()
                .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
                .foregroundColor(Color.black)
            Image(systemName: "chevron.down")
        }
        .padding()
        .overlay(
            RoundedRectangle(cornerRadius: 10)
                .stroke(Color.gray, lineWidth: 1)
        )
    }
    .padding()
}

}

다음은 상위 뷰에서 사용되는 방법입니다.

        PickerWidget(action: { self.isSheetShown.toggle() }){
            Text("US Dollars (USD)")
        }
        .sheet(isPresented: $isSheetShown){
            CurrencyPickerView(isSheetShown: self.$isSheetShown)
        }

완벽하게 작동합니다. 하지만 뷰 수를 1 개로 제한하고 싶습니다만 Text ()이어야합니다. 이를 수행하는 방법이 있습니까?

미리 감사드립니다!

그의 성질

보기 수를 1 개로 제한하고 싶은데 Text () 만 있어야합니다. 이를 수행하는 방법이 있습니까?

예,이 목적을 위해 제네릭이 필요하지 않습니다. Text를 명시 적으로 지정해야하며 컴파일러는 다른 것을 허용하지 않으며 Text는 컨테이너가 아니므로 항상 하나 일 것입니다.

struct PickerWidget: View {
   var action: () -> Void
   private let content: () -> Text

  init(action: @escaping () -> Void, @ViewBuilder content: @escaping () -> Text) {
     ...

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관