标签: uisearchcontroller

UISearchController:即使搜索栏为空,也显示结果

据我了解,默认行为UISearchController是:

  1. 在点击搜索栏时,背景变暗,并显示"取消"按钮.SearchResultsController直到这一点才显示.
  2. SearchResultsController 仅在搜索栏不为空时显示.

我想显示SearchResultsController甚至当搜索栏为空但是被选中时(即上面的情况1).

简单地说,我想显示搜索结果,而不是背景调光.

有没有办法做到这一点?

更多澄清:

我不是UISearchController用来过滤显示它的视图上显示的结果,而是用于其他一些不相关的结果.这就像facebook在其"新闻Feed"中所做的那样.点击搜索栏最初会显示搜索建议,然后,当我们开始编辑时,它会显示可能与新闻Feed无关的搜索结果.

iphone ios ios8 uisearchcontroller

31
推荐指数
7
解决办法
2万
查看次数

UISearchController中的searchBar在tableHeaderView中动画出屏幕

我有一个UISearchControllerUITableViewController作为searchResultsController,在UISearchBar这个searchController设置是在tableHeaderView我目前的tableView在我的根视图控制器显示.正如预期的那样,几乎所有东西都运作良好.但是在动画中UISearchBar(当我点击searchBar和UINavigationBar隐藏并且searchBar到达顶部时,如同UISearchDisplayController)我有一个奇怪的行为.它不会移动到UINavigationBar(y:0)的位置,而是跳出屏幕而不是启动显示取消按钮的动画.我尝试将我的实例化代码移动到viewDidLoad而不是init,事情就是一样的.我认为问题的核心在于searchResultsController视图的框架,但我不确定(我尝试设置框架,但没有成功).我正在做的一切都是纯粹的代码.

以下是代码的相关部分:

- (void) viewDidLoad { 
    [super viewDidLoad];

    // search controller setup
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];
    self.searchController.delegate = self;
    self.searchController.searchResultsUpdater = self;
    self.searchController.searchBar.delegate = self;

    [self.searchController.searchBar sizeToFit];
    self.tableView.tableHeaderView = self.searchController.searchBar;

    self.searchController.definesPresentationContext = YES;
}
Run Code Online (Sandbox Code Playgroud)

我有一个懒惰的负载searchResultsController:

- (UITableViewController *)searchResultsController {
    if (_searchResultsController == nil) {
        _searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; …
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview uisearchbar ios uisearchcontroller

30
推荐指数
5
解决办法
2万
查看次数

通过becomeFirstResponder将焦点分配给UISearchController的UISearchBar时,键盘不会出现

我花了很多时间在网上搜索并与其他开发者讨论这个问题无济于事.确切的问题在这篇SO帖子中有所描述(专注于UISearchBar,但键盘没有出现),虽然已经有很多年了.

我最近在IB中使用了已弃用的UISearchDisplayController和UISearchBar,并通过iOS8的代码切换到UISearchController.

然而,我遇到的问题是焦点被正确分配(你可以看出因为取消按钮在视图加载后动画到搜索栏的右侧),但是键盘没有显示出来.

这是我的代码.

.H

@property (nonatomic, strong) UISearchController *searchController;
Run Code Online (Sandbox Code Playgroud)

.M

- (void)viewDidLoad {
    [super viewDidLoad];
    ...
    [self initializeSearchController];
    ....
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self.searchController setActive:YES];
    [self.searchController.searchBar becomeFirstResponder];
}

- (void)initializeSearchController {
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.searchController.delegate = self;
    self.searchController.searchBar.delegate = self;
    [self.searchController.searchBar sizeToFit];

    [self.tableView setTableHeaderView:self.searchController.searchBar];
    self.definesPresentationContext = YES;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的东西.

  • 我已经尝试在0.2秒延迟时调用becomeFirstResponder,正如另一篇SO帖子中所建议的那样.

  • 我在viewDidAppear中设置了一个断点,并验证self.searchController和self.searchController.searchBar都是有效对象,都不是.

  • 我已经尝试遵循UISearchControllerDelegate并使用以下代码片段

这里:

- (void)didPresentSearchController:(UISearchController *)searchController {
    //no matter what code I put in here to becomeFirstResponder, …
Run Code Online (Sandbox Code Playgroud)

keyboard objective-c uisearchbar ios uisearchcontroller

30
推荐指数
4
解决办法
1万
查看次数

如何在iOS 8中使用UISearchController,其中UISearchBar位于导航栏中并具有范围按钮?

我正在尝试使用UISearchControlleriOS 8中的新功能,并将其嵌入UISearchBar到我的UINavigationBar.这很容易完成如下:

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
navigationItem.titleView = searchController.searchBar
Run Code Online (Sandbox Code Playgroud)

但是当我添加范围按钮时:

searchController.searchBar.showsScopeBar = true
searchController.searchBar.scopeButtonTitles = ["Posts, Users, Subreddits"]
Run Code Online (Sandbox Code Playgroud)

它添加了背后的按钮UISearchBar,显然看起来很奇怪.

我该怎么做?

uinavigationcontroller uisearchbar ios ios8 uisearchcontroller

29
推荐指数
1
解决办法
2万
查看次数

在segue之后持久化的UISearchController

我有一个带有UISearchController的应用程序.UI的这个元素完全在代码中设置如下:

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.searchBarStyle = UISearchBarStyle.Minimal

searchController.searchBar.frame = CGRectMake(searchController.searchBar.frame.origin.x, searchController.searchBar.frame.origin.y, searchController.searchBar.frame.size.width, 44.0)
Run Code Online (Sandbox Code Playgroud)

然后我将它添加到我的tableView的tableHeaderView中

tableView.tableHeaderView = searchController.searchBar
Run Code Online (Sandbox Code Playgroud)

一切似乎都运行良好,但是当它处于活动状态并且我在tableView中选择一个项目时,我的应用程序会切换到另一个视图控制器,并且搜索控制器会持久保存在视图中.我不确定这是如何可能的,因为搜索控制器应该是另一个视图控制器中表视图的子视图.我怎样才能防止这种情况发生?

截图

cocoa-touch uitableview ios segue uisearchcontroller

27
推荐指数
1
解决办法
6810
查看次数

UISearchController无法与非半透明的UINavigationBar一起正常工作

目前我正在尝试将UISearchController嵌入到我的应用程序中.但是UISearchBar是UISearchController的一个属性,如果UINavigationBar是非半透明的,则无法正确显示.通常在点击UISearchBar属性后,UINavigationBar向上移动以为UISearchBar腾出空间.您可以在以下屏幕截图中看到结果:

https://www.dropbox.com/s/172k63zr2bhj84t/Normal_behaviour.png?dl=0

但是如果UINavigationBar的"半透明"属性设置为"NO",则UISearchBar无法正确显示,因为状态栏的背景保持透明,如下面的屏幕截图所示:

https://www.dropbox.com/s/v5cnxoj9ms6976r/Wrong_behaviour.png?dl=0

为了演示这种奇怪的行为,我修改了Apple提供的示例项目:

https://developer.apple.com/library/ios/samplecode/TableSearch_UISearchController/Introduction/Intro.html
Run Code Online (Sandbox Code Playgroud)

在这里您可以下载修改后的版本:

https://www.dropbox.com/s/7icfe6kap98g1e8/TableSearchwithUISearchControllerObj-CandSwift_MODIFIED.zip?dl=0
Run Code Online (Sandbox Code Playgroud)

修改在文件"APLMainTableViewController.m"第33行.

cocoa-touch uinavigationbar uikit ios uisearchcontroller

24
推荐指数
3
解决办法
4322
查看次数

iOS8无法隐藏UISearchController中搜索栏上的取消按钮

我的目标是阻止取消按钮出现在UISearchController的搜索栏中.我从Apple的Table Search开始,使用UISearchController示例代码并隐藏了取消按钮,如下面的代码片段所示.但是,当用户点击文本字段时,仍会显示取消按钮.有帮助吗?

override func viewDidLoad() {
    super.viewDidLoad()

    resultsTableController = ResultsTableController()

    searchController = UISearchController(searchResultsController: resultsTableController)
    searchController.searchResultsUpdater = self
    searchController.searchBar.sizeToFit()
    tableView.tableHeaderView = searchController.searchBar

    searchController.searchBar.delegate = self

    //Hide cancel button - added by me
    searchController.searchBar.showsCancelButton = false

    ...
Run Code Online (Sandbox Code Playgroud)

uisearchbar ios swift ios8 uisearchcontroller

22
推荐指数
3
解决办法
2万
查看次数

导航栏的iOS 11问题更喜欢大标题

Xcode 9 beta 6 iOS 11

我有一个故事板viewController,背景ImageView,tableView和searchFooter 视图视图的子视图.结构如下:

在此输入图像描述

AppDelegate课堂上,我设定了
UINavigationBar.appearance().prefersLargeTitles = true

UINavigationBar.appearance().setBackgroundImage(UIImage(),for: .default)

UINavigationBar.appearance().shadowImage = UIImage()
Run Code Online (Sandbox Code Playgroud)

viewController课堂上,我设置 navigationItem.searchController = searchControllernavigationItem.hidesSearchBarWhenScrolling = true

当我运行应用程序,我发现shadowImagenavigationBar是仍然存在.当我滚动tableView时,navigationBar不会自动(不是prefersLargeTitles模式)自动(左边的gif).我希望navigationBar可以像系统应用程序(右边的gif)一样工作.

我的应用系统应用

一个奇怪的行为:当我删除背景时imageView,它可以像模拟器上的系统应用程序一样工作.

我不知道为什么会这样,我想知道如何解决它?谢谢.

uinavigationbar ios swift uisearchcontroller ios11

22
推荐指数
1
解决办法
2499
查看次数

UITableView中UISearchController的背景颜色

我有一个SearchController的搜索栏以编程方式插入到UITableView的tableHeaderView中.当我拉起来查看搜索栏或刷新表格时,我会看到这个奇怪的深灰色,你可以在下面的图片中看到,在复习活动指示器和搜索栏之间(即使我删除了复习器,这种背景颜色仍然存在)视图):

在此输入图像描述

tableView.tableHeaderView = searchController.searchBar
Run Code Online (Sandbox Code Playgroud)

我试过用我能想到的各种方式改变这种背景颜色:

tableView.backgroundColor = UIColor.redColor()
tableView.tableHeaderView!.backgroundColor = UIColor.redColor()
searchController.searchBar.backgroundColor = UIColor.redColor()
view.backgroundColor = UIColor.redColor()
Run Code Online (Sandbox Code Playgroud)

什么都行不通.这个深灰色不是我在项目中使用的自定义颜色之一,所以我知道我没有手动设置它.一旦我拿出searchController,一切都像以前一样工作:深灰色被其他地方看到的浅灰色所取代.

uitableview ios swift uisearchcontroller

20
推荐指数
3
解决办法
9347
查看次数

在UISearchController中取消按钮

在我的项目中,我使用UITableViewController内部UISearchController来过滤我的数据tableView.

我没有问题来过滤数据,但是tableView当我点击CANCEL按钮时我需要重新加载日期,UISearchController但是我找不到这个的委托方法...

你能帮我理解如何解决这个问题吗?

cancel-button uitableview uisearchcontroller

18
推荐指数
2
解决办法
1万
查看次数