Created
January 14, 2026 04:47
-
-
Save nathandud/edf9f9158f813495648868136e6021c6 to your computer and use it in GitHub Desktop.
Unpredictable number pad behavior on iPad with Xcode 26
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // If built with Xcode 16, the text fields present the full keyboard with | |
| // numbers on the top row. This has been the default iPadOS behavior for as long | |
| // as I can remember. | |
| // If built with Xcode 26, a number pad popover is shown initially but if the | |
| // text field is tapped again or the cursor is moved, the full keyboard shows | |
| // instead. On subsequent taps into a text field, it's a toss-up whether you get | |
| // the popover or the full keyboard. | |
| import SwiftUI | |
| @main | |
| struct NumberPadTestApp: App { | |
| var body: some Scene { | |
| WindowGroup { | |
| NumberPadDemoView() | |
| } | |
| } | |
| } | |
| struct NumberPadDemoView: View { | |
| @State private var text: String = "" | |
| var body: some View { | |
| VStack(spacing: 40) { | |
| // Title | |
| Text("iPadOS Number Pads") | |
| .font(.largeTitle) | |
| .padding(.top, 100) | |
| // SwiftUI | |
| VStack(alignment: .leading, spacing: 10) { | |
| Text("SwiftUI TextField (.numberPad)") | |
| .font(.system(size: 32)) | |
| .foregroundColor(.blue) | |
| TextField("", text: $text) | |
| .keyboardType(.numberPad) | |
| .font(.system(size: 32)) | |
| .textFieldStyle(RoundedBorderTextFieldStyle()) | |
| } | |
| // UIKit | |
| VStack(alignment: .leading, spacing: 10) { | |
| Text("UIKit UITextField (.numberPad)") | |
| .font(.system(size: 32)) | |
| .foregroundColor(.green) | |
| SimpleUIKitTextField() | |
| .frame(height: 36) | |
| } | |
| Spacer() | |
| } | |
| .padding() | |
| .background(Color(UIColor.systemGroupedBackground)) | |
| } | |
| } | |
| // MARK: - UIKit Text Field Representable | |
| struct SimpleUIKitTextField: UIViewRepresentable { | |
| func makeUIView(context: Context) -> UITextField { | |
| let textField = UITextField() | |
| textField.keyboardType = .numberPad | |
| textField.borderStyle = .roundedRect | |
| textField.font = .systemFont(ofSize: 32) | |
| return textField | |
| } | |
| func updateUIView(_ uiView: UITextField, context: Context) { } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment