gpt4 book ai didi

iphone - BarButtonItem 添加后不显示按钮

转载 作者:行者123 更新时间:2023-11-30 13:04:17 26 4
gpt4 key购买 nike

我想要自定义导航项目作为 facebook 应用程序。有两个按钮和一个 UISearchBar。按钮是 leftBarButtonItemrightBarButtonItemUISearchBartitleView。为了使标题 View 中的搜索栏变宽,我通过将其设置为 nil 来删除两个按钮,如下图所示。当单击 searchBarCancelButton 时,我再次添加两个按钮,但按钮未显示。你能帮我吗? enter image description here

当点击searchBarCancelButton时,我希望它显示如下 enter image description here

我尝试过的代码:

func updateSearchResultsForSearchController(searchController: UISearchController) {
if navigationItem.rightBarButtonItem != nil {
self.navigationItem.rightBarButtonItem = nil
self.navigationItem.leftBarButtonItem = nil
}
}

func searchBarCancelButtonClicked(searchBar: UISearchBar) {
navigationItem.setLeftBarButtonItem(getBarButtonItem("info", buttonfor: "left"), animated: false)
navigationItem.setRightBarButtonItem(getBarButtonItem("more_‌​icon", buttonfor: "right"), animated: false)
}

extension MainviewCtrl : UISearchResultsUpdating {
func updateSearchResultsForSearchController(searchController: UISearchController) {

if navigationItem.rightBarButtonItem != nil {
self.navigationItem.rightBarButtonItem = nil
self.navigationItem.leftBarButtonItem = nil
}
}
}

extension MainviewCtrl : UISearchBarDelegate {

func searchBarCancelButtonClicked(searchBar: UISearchBar) {
navigationItem.setLeftBarButtonItem(getBarButtonItem("info", buttonfor: "left"), animated: false)
navigationItem.setRightBarButtonItem(getBarButtonItem("more_icon", buttonfor: "right"), animated: false)
}
}

class MainviewCtrl: UIViewController , UISearchControllerDelegate {

lazy var searchController : UISearchController = {

let _searchController = UISearchController(searchResultsController: nil)
_searchController.searchResultsUpdater = self
_searchController.dimsBackgroundDuringPresentation = false
_searchController.hidesNavigationBarDuringPresentation = false
_searchController.searchBar.delegate = self
_searchController.searchBar.tintColor = UIColor.whiteColor()
_searchController.searchBar.searchBarStyle = UISearchBarStyle.Minimal
var textFieldInsideSearchBar = _searchController.searchBar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = UIColor.whiteColor()
return _searchController
}()

override func viewDidLoad() {
super.viewDidLoad()
navigationItem.titleView = searchController.searchBar
definesPresentationContext = true
addBarButtonItems()
}
func addBarButtonItems(){
navigationItem.leftBarButtonItem = getBarButtonItem("info", buttonfor: "left")
navigationItem.rightBarButtonItem = getBarButtonItem("more_icon", buttonfor: "right")
}
func getBarButtonItem(imagename : String , buttonfor : String)-> UIBarButtonItem!{
let image = (UIImage(named: imagename))!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
switch buttonfor.lowercaseString {
case "left":
return (UIBarButtonItem(image: image, style: UIBarButtonItemStyle.Plain, target: self, action: #selector(MainviewCtrl.infoAction)))
case "right":
return (UIBarButtonItem(image: image, style: UIBarButtonItemStyle.Plain, target: self, action: #selector(MainviewCtrl.moreAction)))
default : break ;
}
return UIBarButtonItem()
}

最佳答案

在您单击取消按钮并将这些项目设置为 nil 后,

updateSearchResultsForSearchController 将再次被调用。您可以在 updateSearchResultsForSearchController 中将搜索 Controller 设置为 nil 之前检查搜索 Controller 是否处于事件状态:

func updateSearchResultsForSearchController(searchController: UISearchController) {
if navigationItem.rightBarButtonItem != nil && searchController.active {
self.navigationItem.rightBarButtonItem = nil
self.navigationItem.leftBarButtonItem = nil
}
}

关于iphone - BarButtonItem 添加后不显示按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39570659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com