单击搜索栏时如何导航到另一个视图控制器
Posted
技术标签:
【中文标题】单击搜索栏时如何导航到另一个视图控制器【英文标题】:How to navigate to another view controller when search bar is clicked 【发布时间】:2019-05-15 21:59:33 【问题描述】:我有点卡在这里。我在导航栏中嵌入了一个搜索栏作为我想要的标题。
但是接下来我想导航到另一个视图控制器,其中包含集合视图中的 UIsearchcontroller,当点击取消时,用户将返回到前一个视图。 (非常类似于 Facebook 或 Instagram 对搜索栏控制器的使用)
我是否可以将搜索栏用作按钮来导航到处理所有搜索功能的下一个视图控制器?
这是我目前的搜索栏。
func setUpNavBar()
let searchBar = UISearchBar()
searchBar.sizeToFit()
searchBar.searchBarStyle = .minimal
searchBar.placeholder = "Search by username"
searchBar.tintColor = UIColor.lightGray
searchBar.barTintColor = UIColor.lightGray
navigationItem.titleView = searchBar
searchBar.isTranslucent = true
编辑
只是添加到下面的答案中,如果有人遇到此问题并且您希望获得将搜索栏视为按钮使用的效果
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool
self.present(UINavigationController(rootViewController: SearchBarController()), animated: true, completion: nil)
searchBar.setShowsCancelButton(false, animated: true)
return false
这样,当您单击搜索栏时,您不会获得显示搜索栏处于活动状态的效果(如果有意义的话)。当您点击搜索栏时,没有任何效果,它只是将您带到(真正的)搜索视图控制器,然后搜索栏处于活动状态,并且键盘显示带有取消按钮。我希望这是有道理的,如果有人想要一个示例,请前往 Instagram、FB 或 Pinterest,然后点击他们的搜索栏或搜索图标,您就会看到。
【问题讨论】:
【参考方案1】:在第一个视图控制器中添加UISearchBarDelegate
。并在searchBarTextDidBeginEditing
方法中呈现第二个视图控制器。
//ViewController.swift
class ViewController: UIViewController, UISearchBarDelegate
override func viewDidLoad()
super.viewDidLoad()
setUpNavBar()
func setUpNavBar()
let searchBar = UISearchBar()
searchBar.delegate = self
searchBar.sizeToFit()
searchBar.searchBarStyle = .minimal
searchBar.placeholder = "Search by username"
searchBar.tintColor = UIColor.lightGray
searchBar.barTintColor = UIColor.lightGray
navigationItem.titleView = searchBar
searchBar.isTranslucent = true
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar)
self.present(UINavigationController(rootViewController: SearchViewController()), animated: false, completion: nil)
//SearchViewController.swift
class SearchViewController: UIViewController
let searchBar = UISearchBar()
override func viewDidLoad()
super.viewDidLoad()
view.backgroundColor = .white
setUpNavBar()
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
searchBar.becomeFirstResponder()
func setUpNavBar()
searchBar.sizeToFit()
searchBar.searchBarStyle = .minimal
searchBar.placeholder = "Search by "
searchBar.tintColor = UIColor.lightGray
searchBar.barTintColor = UIColor.lightGray
navigationItem.titleView = searchBar
searchBar.isTranslucent = true
【讨论】:
感谢工作。无论如何我可以用 searchController 打开 SearchViewController 吗?所以它用键盘打开,取消按钮准备好了吗?如果单击取消,它会将用户带回到以前的 VC? @Clint 是的。你可以使用 searchController。在searchBarCancelButtonClicked
委托方法调用self.dismiss
方法
@Clint 并使用自定义委托将选定的值传递给 tableViewDidSelect
方法中的前一个视图控制器
我选择在搜索结果中使用集合视图而不是 tableView。你说使用自定义委托是什么意思?
@Clint 使用collectionView:didSelectItemAtIndexPath:以上是关于单击搜索栏时如何导航到另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章