Tag: uisearchcontroller

有效地将UISearchController与UICollectionView结合使用

使用UITableView可以轻松集成UISearchController,而使用UICollectionView则不容易 问题 苹果公司的iOS类UITableView与UISearchController及其UISearchBar配合得很好,但是,几乎所有开发人员在尝试将搜索栏与UICollectionView对象进行可视化集成时都举手示意。 在开发负责显示大型组织的REST服务的照片缩略图的应用程序时,我发现了这个问题,并且我希望拥有与UITableView相同的布局。 基于StackOverflow和其他发布内容,大多数人要么不理会试图直观地集成类,要么重载了节标题。 解决方案 由于我希望搜索栏以动画方式显示和隐藏,并在UICollectionViewController的上下文中与相关的集合视图保持正确的尺寸,因此这比我期望支持iOS 9的工作量要多得多和10,但我确实为我的需要制定了解决方案。 为了实现这一点,我编写了一个名为DSSSearchController的UISearchController子类,该子类添加了许多用于显示和隐藏搜索栏的方法。 我将其设计为可与任何视图一起使用,但仅使用特定的集合视图对其进行了测试。 在下面,您将找到Objective-C标头和源代码以及Swift中的版本。 如您所见,需要大量代码来确保搜索栏相对于集合视图的大小正确。 在iOS 9和10中,Apple似乎不将AutoLayout与由UICollectionViewController管理的集合视图一起使用,因此这就是为什么使用框架进行大量计算的原因-试图使用AutoLayout被证明是有问题的。 早期,我发现某些动画会产生一些我不喜欢的搜索栏重影或覆盖,因此这就是为什么某些操作按其原样进行排序的原因。 为了使用我的类,我编写了一个名为configureSearchController的方法,该方法在viewDidLoad期间调用以初始化该类并在搜索栏上设置一些选项。 在我的原始代码中,获得searchBar属性后,将其barTintColor更改为深海蓝色,将tintColor更改为白色,并将其搜索字段的tintColor更改为深海蓝色。 另外,我的导航栏的barStyle属性具有UIBarStyleBlack。 当用户点击导航栏中的放大镜图标时,将调用toggleSearchBar:方法。 我发现当我要展示一个视图控制器时,我需要知道我的搜索控制器是否是要展示的控制器,这是在搜索字段具有焦点时发生的。 我确定我的解决方案可以改进,并且可能会在更高版本的iOS中中断,但目前可以使用。 希望iOS 10的后继版本将内置一个解决方案。

小斯威夫特问题

在使用UISearchController的导航栏中实现UISearchBar时,您需要进行以下设置: navigationItem.searchController = searchController 当搜索栏为空时,您可能无法显示结果表视图(例如,您可能希望显示最近的搜索) 您尝试了一切,包括: self.searchController?.searchResultsController?.view.isHidden = false 在UISearchControllerDelegate和UISearchBarDelegate方法中: willPresentSearchController,didPresentSearchController和textDidChange,searchBarTextDidBeginEditing。 但是仍然无法正常工作! 解: 在viewDidAppear中设置searchController.isActive = true 注意:但是,如果要通过以下设置将搜索栏放置在导航项的标题视图中: navigationItem.titleView = searchController.searchBar 你可以设定 在viewWillAppear中的 searchController.isActive = true

UISplitViewController与新的UISearchController问题与UISearchBar

我最近开始重写我的iOS应用程序,使用新的UISearchController和一个通用的故事板。 我的应用程序适用于这两种设备( iPhone和iPad ),所以使用UISplitViewController更改为通用故事板是一大优势。 但不幸的是, UISearchController没有按预期工作。 我用下面几行添加了UISearchController : self.searchController = UISearchController(searchResultsController: nil) self.searchController.searchBar.sizeToFit() self.searchController.dimsBackgroundDuringPresentation = false self.myTableView.tableHeaderView = self.searchController.searchBar self.searchController.searchResultsUpdater = self self.definesPresentationContext = true 我的控制器链是这样的: UISplitViewController UITabbarController (Master) UINavigationController UITableViewController UINavigationController (Detail) UINavigationController UIViewController 问题是在UISearchBar覆盖的iPad应用程序。 但是,如果我切换选项卡,并返回到视图。 UISearchBar是可见的。 所以不知何故,在一个tabbar开关后,它正确地重绘视图。 在iPhone版本中,它会自动更正。 iPad应用程序 第一次启动后, UISearchBar被UINavigationBar覆盖 切换标签后, UISearchBar显示正确 iPhone应用程序 iPhone应用程序正常工作,无需更改标签。 我试过的: 使用extendsEdges的不同设置 在viewWillAppear方法中添加SearchController,因为我以后可以通过添加search控件来欺骗它

将UISearchBar放在tableview上方,但不能放在tableview或navbar中

我的故事板上的视图控制器上有一个UISearchBar和一个UITableView。 search栏在tableview上方,以便它不滚动。 我的问题是,UISearchController的初始化创build了自己的SearchBar实例,它与我手动添加和定位在我的故事板上的实例不一样。 如何将我的故事板SearchBar设置为由我的UISearchController为我创build的? class ITSearchController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating { @IBOutlet weak var tableView: UITableView! @IBOutlet weak var searchBar: UISearchBar! // So that the search results are displayed in the current controllers table view let searchController = UISearchController(searchResultsController: nil) override func viewDidLoad() { searchController.searchResultsUpdater = self searchController.dimsBackgroundDuringPresentation = false definesPresentationContext = true // This […]

如何在使用UISearchController时在updateSearchResultsForSearchController中过滤对象数组?

我的search控制器类如下所示: class FeastSearchTableViewController: UITableViewController, UISearchResultsUpdating { var feastEntries = [FeastEntry]() var filteredFeasts = [FeastEntry]() /* let tableData = ["One","Two","Three","Twenty-One"] var filteredTableData = [String]()*/ var resultSearchController = UISearchController() override func viewDidLoad() { super.viewDidLoad() self.resultSearchController = ({ let controller = UISearchController(searchResultsController: nil) controller.searchResultsUpdater = self controller.dimsBackgroundDuringPresentation = false controller.searchBar.sizeToFit() self.tableView.tableHeaderView = controller.searchBar return controller })() self.feastEntries = […]

UISearchController的searchBar不会填满整个宽度

编辑:我正在使用Autolayout。 我有一个问题,用UISearchController的searchBar填充我的屏幕的整个宽度。 我的设置是这样的: 我有一个UIViewController。 在里面,我把所有的元素分开。 有一个UITableView显示结果。 由于我在search条重叠状态栏时遇到了问题,我创build了一个普通的UIView,它有一个约束条件,使它位于状态栏的下方,并填充UIViewController的全部宽度。 这是我在这里看到无数次的方法。 最后,我创buildUISearchController并将其添加为“wrapperView”的子视图 结果如下: 蓝色只能看到容器视图的扩展位置 对我来说,searchBar要么不能正确地填充容器,要么没有正确居中,因为左边的边看起来不像另一边那么宽。 而且,当search框处于活动状态时,所有内容都会正常显示,如下所示: 表格也显示正常 这里是我做我的设置的代码: //Mark: – Outlets @IBOutlet weak var wrapperView: UIView! @IBOutlet weak var tableView: UITableView! //Mark: – Properties let searchController = UISearchController(searchResultsController: nil) override func viewDidLoad() { /*! Sets the values of the searchController and it's behaviour */ searchController.searchResultsUpdater = self searchController.dimsBackgroundDuringPresentation […]

当SearchBar被激活时,隐藏的StatusBar会重新出现

我有一个简单的应用程序与TableView,但没有NavigationBar / NavigationController。 该应用程序还具有一个始终可见的SearchBar的UISearchController。 我试图用prefersStatusBarHidden隐藏状态栏,工作正常。 直到SearchBar被激活。 然后状态栏会再次出现。 我怎样才能防止这种情况,并保持状态栏隐藏? var cityRepository:CityRepository? var searchController:UISearchController? override func viewDidLoad() { self.cityRepository = CityRepository() self.searchController = UISearchController(searchResultsController: nil) self.searchController!.searchResultsUpdater = self self.searchController!.dimsBackgroundDuringPresentation = false self.definesPresentationContext = true self.tableView.tableHeaderView = searchController?.searchBar //* Already tried this …. self.edgesForExtendedLayout = UIRectEdge.None self.extendedLayoutIncludesOpaqueBars = true self.automaticallyAdjustsScrollViewInsets = false super.viewDidLoad() } override func prefersStatusBarHidden() -> […]

导航下方出现的IOSsearch栏

我试图有一个search栏绑定到我的UISearchController出现在导航栏下面,类似这样: 目前,search栏取代了我所见过的大多数/所有IOS应用程序中常见的标题。 我试图通过几种方法来控制search栏的显示: 1)创build一个位于导航栏下方的新视图,并为其分配SearchController的search栏。 //instead of: //navigationItem.titleView = searchBar //do this: searchplaceholder.addSubview(searchBar) 但是,search栏显示在屏幕下方1/2的位置。 2)第二次尝试是将search栏的框架移动到原点: searchBar.frame = CGRectMake(0, 0, self.view.frame.width, searchBar.frame.height) view.addSubview(searchBar) resultSearchController?.active = true 最初看起来不错: 但是,一旦我开始打字,酒吧又跳起来: 我怎么能劫持SearchController呈现它的酒吧或者在导航栏而不隐藏页面标题或限制search栏出现在导航栏下?

search结果中的3D Peek&Pop

我使用search栏来过滤我的表格视图。 我在显示可search内容的相同视图控制器中显示search结果。 它工作正常。 除了一件事 – 3D Peek和Pop不适用于search结果 。 我曾尝试Storyboard segue中的“Peek&Pop”checkbox。 我没有尝试在我的TableViewController中编程偷看和stream行。 结果是一样的:peek&pop适用于表格视图单元格,但不适用于search结果单元格。 这里是search和偷看&stream行代码片断: // Add a search bar searchController = UISearchController(searchResultsController: nil) tableView.tableHeaderView = searchController.searchBar searchController.searchResultsUpdater = self searchController.hidesNavigationBarDuringPresentation = false searchController.dimsBackgroundDuringPresentation = false self.tableView.contentOffset = CGPoint(x: 0, y: searchController.searchBar.frame.height) // Register for preview if traitCollection.forceTouchCapability == .available { previewingContext = registerForPreviewing(with: self, sourceView: tableView) […]

范围栏在UISearchController中定位

我正在开发一个仅限iPad的应用程序,并且在UIViewController中有一个UITableView。 我设置了一个UISearchController作为UITableView的头部。 这个search控件有三个范围。 我希望范围select器在search栏下方 。 用下面这段代码,我可以在init中得到它,但是当我开始input时,select器向右移动, 并保持在那里 。 这是一个animation: 这里是相关的代码: self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; self.searchController.searchResultsUpdater = self; self.searchController.dimsBackgroundDuringPresentation = NO; self.searchController.searchBar.scopeButtonTitles = @[@"Uno",@"Dos", @"Tres"]; self.searchController.searchBar.delegate = self; self.tableView.tableHeaderView = self.searchController.searchBar; self.searchController.searchBar.showsScopeBar = YES; self.definesPresentationContext = YES; [self.searchController.searchBar sizeToFit]; 提前致谢