I can reproduce a phone-keypad popover reopening issue in a standalone UIKit app, with no third-party frameworks or custom input view.
Environment
- iPad Pro 11-inch (M4) simulator, iPadOS 26.5, landscape
- Xcode 27.1
- Observed when UIKit presents the small telephone-keypad popover for a UITextField whose keyboardType is .phonePad. Device Hub's hardware/software keyboard settings affect whether this popover or the full-width keyboard appears.
- Reproduced both in a plain UIViewController inside UINavigationController and in a stock UISplitViewController. Physical-device behavior and other OS versions have not been verified.
Steps
- Add a normal UITextField, set keyboardType = .phonePad, and call becomeFirstResponder() in viewDidAppear.
- With the small phone-keypad popover visible, tap blank space outside it to dismiss it.
- Tap the same text field again.
Expected: The telephone-keypad popover reopens so the user can continue entering a phone number.
Actual: The popover does not reopen. Sometimes an AutoFill edit menu appears instead. The text field still reports isFirstResponder == true. Calling becomeFirstResponder() again returns true but does not restore the keypad.
The baseline has no UITextFieldDelegate, custom gesture recognizer, custom inputView, or automatic focus-recovery code.
Diagnostic results in this environment
- Repeating becomeFirstResponder() while already first responder: returns true, keypad remains absent.
- Explicitly calling reloadInputViews(): keypad reappears.
- Explicitly calling resignFirstResponder(), then becomeFirstResponder() in a separate button action: keypad reappears.
- Recreating the view controller: keypad reappears.
The attached animated screen recording shows initial presentation, dismissal, a failed retap, a responder-state snapshot, another becomeFirstResponder() call, and recovery after Reload inputs. The diagnostic buttons only perform the named action; no recovery runs automatically.
Relevant setup/actions from the standalone app:
private let phoneField = UITextField()
// viewDidLoad: add phoneField to the view and set its constraints
phoneField.keyboardType = .phonePad
// viewDidAppear
let result = phoneField.becomeFirstResponder()
print(result, phoneField.isFirstResponder)
// Diagnostic button A, after dismissing and retapping:
let again = phoneField.becomeFirstResponder()
print(again, phoneField.isFirstResponder) // true, true; keypad absent
// Diagnostic button B:
phoneField.reloadInputViews() // popover reappears in this test
One additional observation: keyboard hide notifications can be delivered even while the small telephone-keypad popover is visibly present. Therefore, the last keyboard notification/frame is not a reliable visibility signal for this popover in this test.
Is this an expected distinction between the phone-keypad popover and the software keyboard, or a UIKit/Simulator issue? What is the recommended public-API approach to allow a user to reopen it after dismissal? In particular, is calling reloadInputViews() when the field is already first responder an appropriate workaround, and is there a supported way to detect this popover's dismissed state?
I have not yet filed a Feedback Assistant report, so there is no FB number to reference. I can provide the standalone reproduction project if needed.