iOS Inline Inquiries Guide
Persona inquiries are usually presented fullscreen on iOS, but it is possible to launch inquiries inline using the SDK. The inline flow lets you embed the Persona Inquiry directly into your app’s navigation. Your app controls the presentation, navigation actions (back/cancel), and dismissal of Persona.
Building an inline Inquiry
To launch an inquiry inline, build one via same builders as you normally would. Then call startInline() on the built Inquiry to get a PersonaInlineViewController. This viewController is detached from the view hierarchy. startInline() returns nil if the Inquiry has already been started or completed.
Presenting the view controller
The inline view controller can be presented like any other UIViewController. How you present it depends on your app’s architecture.
By default, the SDK’s built-in navigation bar is hidden so that you can provide your own. Configure title and bar buttons on the view controller’s navigationItem:
When the user taps your back or cancel buttons, you can choose to forward the action to the inline view controller:
Getting results from an inline Inquiry
Inline Inquiries return results through the same InquiryDelegate protocol used by the modal flow. Implement it on the same object you passed as delegate: when constructing the Inquiry.
Unlike the fullscreen presentation flow, the inline flow is not automatically dismissed on completion. Your app is responsible for removing or popping the inline view controller from its container.
Using custom navigation UI
Because the SDK does not render its own navigation bar in the inline flow, your app needs to keep its buttons in sync with the SDK’s internal state if you wish to allow users to navigate within Persona’s flow. Inquiries can have complex states where the back and/or cancel actions are not available, and your UI should reflect this.
Implement PersonaInlineDelegate to receive navigation state updates and a one-time signal when the first step is ready to display:
Loading state handling
By default there is a brief loading period before the first step renders. You can either show your own loading UI while the SDK initializes, or hold onto the inline view controller and only present it once onReady() is called to avoid a visible loading delay.
Tracking flow progress with events
Use InquiryDelegate.inquiryEventOccurred(event:) to react to flow progression — for example, to update a progress indicator, breadcrumb, or analytics event as the user moves between steps.
pageChange.name is the step name you configured in your Inquiry Template, so the strings you compare against should match the step names from your own template (not the SDK’s internal step types). Flow completion is signaled by inquiryComplete, not by a pageChange event.

