     fileprivate var oldTextViewDelegates: [UITextView: UITextViewDelegate?] = [:]
     @objc public weak var currentInputView: UIView?
 
+    private var allowTraversal: Bool = true
     private weak var tableView: UITableView?
     private weak var scrollView: UIScrollView?
     private var originalContentInset: UIEdgeInsets?

        space.width = 12

        let toolbar = FormControllerInputAccessoryToolbar(frame: .zero)
        toolbar.items = [
            space,
            previousButton,
            space,
            nextButton,
            UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
            doneButton,
            space,
        ]

        let view = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: UIScreen.main.bounds.width, height: 44)))
        view.addSubview(toolbar)

        - inputViews: the array of form input fields to iterate through, in order
        - tableView: tableView with cells containing input fields, for keyboard
            avoidance
        - allowTraversal: if `true`, provide Next/Prev buttons to navigate to
            other text fields managed by the `FormController`; if `false`, only
            provide the Done button to dismiss an input view
        - environment: optional instance of an app's environment
     */
    @objc public init(inputViews: [UIView], in tableView: UITableView, allowTraversal: Bool = true, environment: Environment?) {
        super.init()
        self.inputViews = inputViews
        self.tableView = tableView
        self.environment = environment
        self.allowTraversal = allowTraversal
        _init()
    }

