【问题标题】:becomeFirstResponder not showing from viewDidLoadbecomeFirstResponder 未从 viewDidLoad 显示
【发布时间】:2026-01-20 09:00:01
【问题描述】:

这里有一个简单的例子。我在viewDidLoad 中打电话给FirstResponder。但附件视图仅在点击屏幕后才会显示。为什么一开始就没有显示?

class TestViewController: MainPageViewController {

    private let accessoryView = UIView() //TextInputView() // MessageInputAccessoryView()

    override var inputAccessoryView: UIView {
        return accessoryView
    }

    override var canBecomeFirstResponder: Bool { return true }



    override func viewDidLoad() {
        super.viewDidLoad()

        accessoryView.backgroundColor = .red
        accessoryView.frame = CGRect(x: 0, y: 0, width: 300, height: 50)
        self.becomeFirstResponder()

        // Do any additional setup after loading the view.

        let tap = UITapGestureRecognizer(target: self, action: #selector(tappo))
        self.view.isUserInteractionEnabled = true
        self.view.addGestureRecognizer(tap)

        tappo()
    }


    func tappo() {
        self.becomeFirstResponder()
    }


}

【问题讨论】:

  • accessoryView.becomeFirstResponder() 而不是 self.becomeFirstResponder()?
  • @Larme 不。 ;/

标签: ios swift viewdidload becomefirstresponder


【解决方案1】:

viewWillAppear 是放置becomesFirstResponder 的更好位置。试试看。

【讨论】:

  • 所以我已经在我当前的项目中尝试过这个,但它不起作用。但是尝试创建一个示例,并且确实如此..我正在使用页面视图控制器,其中一个页面应该成为第一响应者,但必须有一些东西覆盖它......哦,好吧..
【解决方案2】:

所以有些事情让我的第一响应者辞职(因为我使用的是UIPageViewController)。所以我把这个添加到我的UIViewControler

override var canResignFirstResponder: Bool { return false }

就是这样。干杯!

【讨论】: