ios - UINavigationController 实例化后 UISearchbar 不可见

标签 ios swift uinavigationcontroller uisearchbar uisearchbardelegate

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

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 注释并转到 attractionsDetailVC 时:

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 动图:
enter image description here

最佳答案

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

关于ios - UINavigationController 实例化后 UISearchbar 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32512934/

相关文章:

ios - 仅为目标 V​​iewController 设置导航栏

iphone - 使用 App Delegate 处理多个 UINavigationController 并确保 UINavigationController 正确解除分配

ios - 核心数据 NSManagedObject 变化

ios 像这样滚动

iphone - 如何在 "Ringer & Alert Volume"级别播放声音

ios - 浅色 Cocos2dx 上的 GL 混合

ios - 快速多级导航看不到后退按钮

swift - 如何快速将参数传递给选择器?

ios - 第一次调用时出现CallKit错误7

swift - 无法将值附加到我的 NSArray 变量