如何在此视图控制器中显示inputAccessoryView

时间:2019-02-28 15:53:00

标签: ios swift uiviewcontroller inputaccessoryview

我调用的控制器中有一个函数

private func toggleLauncher() {
    let launcher = CommentsLauncher()
    launcher.showLauncher()
}

这实际上是在当前视图的顶部添加一个具有半透明背景的视图。

然后我想在新添加的视图的底部呈现自定义inputAccessoryView

class CommentsLauncher: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor(white: 0, alpha: 0.5)
    }

    func showLauncher() {
         if let window = UIApplication.shared.keyWindow {
            window.addSubview(view)
        }
    }

    override var inputAccessoryView: UIView? {
        get {
            let containerView = UIView()
            containerView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 50)
            containerView.backgroundColor = .purple
            return containerView
        }
    }

    override var canBecomeFirstResponder: Bool {
        return true
    }
}

所有发生的事情都是半透明的背景可见,但是我也没有在视图中添加inputAccessoryView,而且不确定为什么。

1 个答案:

答案 0 :(得分:0)

您的CommentLauncher永远不会成为您提供的代码中的第一响应者。当响应者成为第一响应者时,将显示UIResponder的inputAccessoryView。

将showLauncher方法更改为以下内容:

func showLauncher() {
    if let window = UIApplication.shared.keyWindow {
        window.addSubview(view)
        becomeFirstResponder()
    }
}

您应该会看到输入的附件视图。