사용자 정의 버튼으로 SwiftUI 키보드 확장


10

SwiftUI 숫자 패드에 키 또는 버튼을 추가하는 방법을 찾으려고합니다. 내가 찾은 유일한 참조는 불가능하다고 말합니다. 스위프트 세계에서 키보드를 닫거나 다른 기능을 수행하는 버튼이있는 툴바를 추가했습니다.

상단에 버튼이있는 ZStack보기를 만들 수도 있지만 숫자보기를 내보기에 추가하는 방법을 찾을 수 없습니다.

이 경우 실제로하려고하는 것은 데이터를 입력 할 때 numberPad를 해제하는 것입니다. 먼저 SceneDelegate를 수정하여 탭을 닫으려고 시도했지만 뷰의 열린 공간이 아닌 다른 텍스트 또는 텍스트 필드보기를 탭하는 경우에만 작동합니다.

window.rootViewController = UIHostingController(rootView: contentView.onTapGesture {
    window.endEditing(true)
})

이상적으로 왼쪽 하단 공간에 완료 키를 추가합니다. SwiftUI에서 툴바를 수행 할 수 있다면 툴바를 추가하는 것이 가장 좋습니다.

여기에 이미지 설명을 입력하십시오

모든 안내를 부탁드립니다.

Xcode 버전 11.2.1 (11B500)

답변:


6

UIRepresentable 프로토콜을 사용하여 문제를 해결했습니다.

 struct TestTextfield: UIViewRepresentable {
    @Binding var text: String
    var keyType: UIKeyboardType
    func makeUIView(context: Context) -> UITextField {
        let textfield = UITextField()
      textfield.keyboardType = keyType
        let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: textfield.frame.size.width, height: 44))
        let doneButton = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(textfield.doneButtonTapped(button:)))
        toolBar.items = [doneButton]
        toolBar.setItems([doneButton], animated: true)
        textfield.inputAccessoryView = toolBar
        return textfield
    }

    func updateUIView(_ uiView: UITextField, context: Context) {
        uiView.text = text

    }
}

extension  UITextField{
    @objc func doneButtonTapped(button:UIBarButtonItem) -> Void {
       self.resignFirstResponder()
    }

}

컨텐츠보기에서 사용

struct ContentView : View {
@State var text = ""

var body: some View {
    TestTextfield(text: $text, keyType: UIKeyboardType.phonePad)
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: 50)
        .overlay(
            RoundedRectangle(cornerRadius: 16)
                .stroke(Color.blue, lineWidth: 4)
    )
}

}


1
나는 순수한 SwiftUI 솔루션을 원했지만 당신이 맞다고 생각합니다.
user2698617

인스턴스화 된 코디네이터를 구현하고 makeCoordinator()위임 및 선택기 대상에 사용하는 것이 좋습니다. 다른 의견에 동의하지만 아직 순수한 SwiftUI 솔루션이 존재하지 않는 것 같습니다.
Bjørn Olav Ruud
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.