单击导航栏放大镜时如何显示搜索栏? (barButtonSystemItem:.search)

时间:2020-07-15 21:36:52

标签: swift xcode uisearchbar

所以这是我关于Stack Overflow的第一篇文章。我已经在Hacking with Swift网站上在线学习iOS了几个月。这个问题与项目16间接相关,我一直在尝试为自己的练习添加搜索栏,但可惜我被困住了。

我正在尝试在导航控制器栏上添加搜索栏,最好与我的“地图视图”按钮并排在同一行上,但是很遗憾没有成功。因此,我尝试通过添加以下内容来尝试更简单的方法:navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem:.search,target:self,action:#selector(searchBar))...但是,当我现在单击右上方的放大镜时,将进行搜索栏不会出现-即使使用@objc方法,我也在ViewDidLoad之外添加了该方法。也许我在代码中犯了一个错误?也许我缺少什么?如果有人可以指出我正确的方向?这是我当前所指的代码的副本:

import MapKit
import UIKit

class ViewController: UIViewController, MKMapViewDelegate, UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
        guard let text = searchController.searchBar.text else { return }
        print(text) }

@IBOutlet var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    let london = Capital(title: "London", coordinate: CLLocationCoordinate2D(latitude: 51.507222, longitude: -0.1275), info: "Home to the 2012 Summer Olympics.")
    let oslo = Capital(title: "Oslo", coordinate: CLLocationCoordinate2D(latitude: 59.95, longitude: 10.75), info: "Founded over a thousand years ago.")
    let paris = Capital(title: "Paris", coordinate: CLLocationCoordinate2D(latitude: 48.8567, longitude: 2.3508), info: "Often called the City of Light.")
    let rome = Capital(title: "Rome", coordinate: CLLocationCoordinate2D(latitude: 41.9, longitude: 12.5), info: "Has a whole country inside it.")
    let washington = Capital(title: "Washington", coordinate: CLLocationCoordinate2D(latitude: 38.895111, longitude: -77.036667), info: "Named after George himself.")
    
    mapView.addAnnotations([london, oslo, paris, rome, washington])

    
    
    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Map View", style: .plain, target: self, action: #selector(changeView))
    
    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: #selector(searchBar))
}


@objc func searchBar() {
    let searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search Location"
    navigationItem.searchController = searchController
}

0 个答案:

没有答案