如何解决UISearchController不可见UISearchController的searchResultsController
我想要的是searchResultsController是可见的,即使搜索查询为空。我通过将searchResultsController的视图设置为在updateSearchResults(for searchController: UISearchController)
方法中不隐藏来实现。它工作正常,但XCTest框架无法找到searchResultsController的内容。
这是带有searchBar的主UIViewController的代码(通过Storyboard嵌入在UINavigationController中):
class ViewController: UIViewController,UISearchResultsUpdating {
private let searchController = UISearchController(searchResultsController: SearchResultsViewController())
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
navigationItem.searchController = searchController
}
// MARK: - UISearchResultsUpdating
func updateSearchResults(for searchController: UISearchController) {
// Make results visible even if search query is empty
searchController.searchResultsController?.view.isHidden = false
}
}
这是SearchResultsViewController的代码,仅显示标签:
final class SearchResultsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel()
label.text = "search"
view.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
label.centerXAnchor.constraint(equalTo: view.centerXAnchor),label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
}
}
最后,UI测试自身(成功完成):
class SearchUiTestingUITests: XCTestCase {
func testExample() throws {
// UI tests must launch the application that they test.
let app = XCUIApplication()
app.launch()
let searchField = app.searchFields.firstMatch
searchField.tap()
// failing to find the label,but it's there
XCTAssertFalse(app.staticTexts["search"].exists)
searchField.typeText("1")
// Now it finds it
XCTAssert(app.staticTexts["search"].exists)
}
}
What it looks like running this test
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。