1

当我点击一个搜索按钮时,我有一个UISearchBar加载的。因此,我有func searchBarSearchButtonClicked(searchBar: UISearchBar)func searchBarCancelButtonClicked(searchBar: UISearchBar)委托方法。但是问题是,当我转到另一个嵌入了 a 的视图控制器UINavigationController并返回带有搜索栏的页面并单击搜索按钮时,整个标题视图都不会出现。这是我目前的代码:

func searchbarPopulate() {
        tempSearchBar = searchButton
        searchBar2.delegate = self
        searchBar2.searchBarStyle = UISearchBarStyle.Minimal
        searchBar2.showsCancelButton = true
    }

    @IBAction func tapSearchButon(sender: AnyObject) {
        self.viewDidLoad()
        searchbarPopulate()
        self.navigationItem.rightBarButtonItem = nil
        navigationItem.titleView = searchBar2
        searchBar2.alpha = 0
        navigationItem.setLeftBarButtonItem(nil, animated: true)
        UIView.animateWithDuration(0.5, animations: {
//            self.searchBar2.alpha = 1
            }, completion: { finished in
                self.searchBar2 .becomeFirstResponder()
                self.searchBar2.alpha = 1
            })
    }

    func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        attractionsMap.removeAnnotations(attractionsMap.annotations);
        performYelpSearch(searchBar.text)
        searchBarCancelButtonClicked(searchBar)
    }
    func searchBarCancelButtonClicked(searchBar: UISearchBar) {
        UIView.animateWithDuration(0.5, animations: { () -> Void in
            searchBar.alpha = 0
            }) { (completed) -> Void in
//                self.navigationItem.titleView = "Attractions"
                // Make Title View of Attractions in Sketch
                self.navigationItem.rightBarButtonItem = self.searchButton

        }
}

这是当 pin 注释被点击并连接到tractionsDetailVC 时:

func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) {
    if (control == view.rightCalloutAccessoryView) {
        let selectedLocation = view.annotation;
        let selectedCoordinate = view.annotation.coordinate;
        var latitude = selectedCoordinate.latitude
        var longitude = selectedCoordinate.longitude
        var location:CLLocation = CLLocation(latitude: latitude, longitude: longitude)
        let businessPlacemark = MKPlacemark(coordinate: selectedCoordinate, addressDictionary: nil)
        indicatedMapItem = selectedCoordinate;
        let resturantMock:Resturant = Resturant(dictionary: resultQueryDictionary)
        let dataArray = resultQueryDictionary["businesses"] as! NSArray
        var foundDisplayAddress:String = "Address not found"
        for business in dataArray {
            let obj = business as! NSDictionary
            var yelpBusinessMock: YelpBusiness = YelpBusiness(dictionary: obj)
            if yelpBusinessMock.latitude == view.annotation.coordinate.latitude {
                if yelpBusinessMock.longitude == view.annotation.coordinate.longitude {
                    attractionDict = obj;
                    foundDisplayAddress = yelpBusinessMock.displayAddress
                    businessMock = Business(dictionary: obj)
                }
            }
        }
        attractionLocationString = foundDisplayAddress
        performSegueWithIdentifier("attractionToDetail", sender: view);
    }
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "attractionToDetail" {
        if let annotation = (sender as? MKAnnotationView)?.annotation {
            if let ivc = segue.destinationViewController as? AttractionsDetailViewController {
                searchBarCancelButtonClicked(searchBar2)
                ivc.attractionLocation = self.indicatedMapItem
                ivc.attractionDetailAddressString = self.attractionLocationString
                ivc.currentBusiness = self.attractionDict
                ivc.businessToUse = self.businessMock
            }
        }
    }

为了清楚起见,这是一个 GIF:
在此处输入图像描述

4

1 回答 1

1

确保您设置navigationItem.titleView正确。您将设置titleView为 nil

于 2015-09-12T14:43:26.590 回答