【问题标题】:Adding focus to a UISearchBar in custom UIView programmatically not working以编程方式将焦点添加到自定义 UIView 中的 UISearchBar 不起作用
【发布时间】:2019-07-12 17:42:38
【问题描述】:

我想要实现的是让一个按钮单击动作触发一个 uiview 弹出窗口,在视图顶部有一个搜索栏,然后在下面显示一个 UISearchBar 和一个 UITableView。我已经成功实现了这些事件,但是在搜索栏中单击时没有任何反应。搜索栏只有单词搜索和搜索栏按钮。我为 ViewController 子类化了 UISearchBarDelegate、UISearchResultsUpdating 和 UISearchControllerDelegate。如前所述,我在没有情节提要的情况下在 Swift 中以编程方式执行此操作。没有出路或行动。我正在调用方法来执行必要的操作。

private var resultSearchController: UISearchController!
    private var  locationSearchTable = LocationSearchTable()

func didClickSearchButton() {

        locationSearchTable = LocationSearchTable()
        locationSearchTable.tableView.delegate = self
        resultSearchController = UISearchController(searchResultsController: locationSearchTable)
        mapSearchTable.tableHeaderView = resultSearchController?.searchBar
        resultSearchController.delegate = self
        resultSearchController.searchBar.delegate = self
        resultSearchController.searchResultsUpdater = self
}

我将 searchBar 添加到 tableView 标题中,它确实显示出来了。

override func viewDidLoad() {
    super.viewDidLoad()
    layout()
}

在 SuperView 中调用“布局”有效。

private func layout() {

        popupView.translatesAutoresizingMaskIntoConstraints = false
        popupView.addGestureRecognizer(panRecognizer)
        didClickSearchButton()

        popupView.addSubview(resultSearchController.searchBar) //Tried adding this to the view, but all it did was put it in a different location.
        popupView.addSubview(openTitleLabel)
        popupView.addSubview(searchButton)
        popupView.addSubview(mapSearchTable)
        view.addSubview(popupView)

        popupView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        popupView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        bottomConstraint = popupView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: popupOffset)
        bottomConstraint.isActive = true
        popupView.heightAnchor.constraint(equalToConstant: 467).isActive = true 

        searchButton.translatesAutoresizingMaskIntoConstraints = false
        searchButton.leadingAnchor.constraint(equalTo: popupView.leadingAnchor, constant: 50).isActive = true
        searchButton.trailingAnchor.constraint(equalTo: popupView.trailingAnchor, constant: -50).isActive = true
        searchButton.topAnchor.constraint(equalTo: popupView.topAnchor, constant: 5).isActive = true

        openTitleLabel.translatesAutoresizingMaskIntoConstraints = false
        openTitleLabel.leadingAnchor.constraint(equalTo: popupView.leadingAnchor, constant: 50).isActive = true
        openTitleLabel.trailingAnchor.constraint(equalTo: popupView.trailingAnchor, constant: -50).isActive = true
        openTitleLabel.topAnchor.constraint(equalTo: popupView.topAnchor, constant: 5).isActive = true
        openTitleLabel.bottomAnchor.constraint(equalTo: popupView.bottomAnchor, constant: 0)

        mapSearchTable.translatesAutoresizingMaskIntoConstraints = false
        mapSearchTable.topAnchor.constraint(equalTo: popupView.topAnchor, constant: 50).isActive = true
        mapSearchTable.bottomAnchor.constraint(equalTo: popupView.bottomAnchor, constant: 10).isActive = true
        mapSearchTable.leftAnchor.constraint(equalTo: popupView.leftAnchor).isActive = true
        mapSearchTable.rightAnchor.constraint(equalTo: popupView.rightAnchor).isActive = true
        mapSearchTable.centerXAnchor.constraint(equalTo: popupView.centerXAnchor).isActive = true
}

我可以看到所有元素,但是单击输入框时文本字段内没有焦点。

【问题讨论】:

    标签: uiview uisearchbar uisearchcontroller


    【解决方案1】:

    原来问题出在我为处理 searchBar 的呈现而创建的 UISearchBar 类中的存储属性 alpha 值上。我将 alpha 的值设置为“0”,删除该值后,我能够正常呈现 UISearchBar。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-20
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多