据我了解,默认行为UISearchController是:
SearchResultsController直到这一点才显示.SearchResultsController 仅在搜索栏不为空时显示.我想显示SearchResultsController甚至当搜索栏为空但是被选中时(即上面的情况1).
简单地说,我想显示搜索结果,而不是背景调光.
有没有办法做到这一点?
更多澄清:
我不是UISearchController用来过滤显示它的视图上显示的结果,而是用于其他一些不相关的结果.这就像facebook在其"新闻Feed"中所做的那样.点击搜索栏最初会显示搜索建议,然后,当我们开始编辑时,它会显示可能与新闻Feed无关的搜索结果.
我有一个UISearchController与UITableViewController作为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) 我花了很多时间在网上搜索并与其他开发者讨论这个问题无济于事.确切的问题在这篇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) 我正在尝试使用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
我有一个带有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中选择一个项目时,我的应用程序会切换到另一个视图控制器,并且搜索控制器会持久保存在视图中.我不确定这是如何可能的,因为搜索控制器应该是另一个视图控制器中表视图的子视图.我怎样才能防止这种情况发生?

目前我正在尝试将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行.
我的目标是阻止取消按钮出现在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) 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 = searchController和navigationItem.hidesSearchBarWhenScrolling = true
当我运行应用程序,我发现
shadowImage的navigationBar是仍然存在.当我滚动tableView时,navigationBar不会自动(不是prefersLargeTitles模式)自动(左边的gif).我希望navigationBar可以像系统应用程序(右边的gif)一样工作.
一个奇怪的行为:当我删除背景时
imageView,它可以像模拟器上的系统应用程序一样工作.
我不知道为什么会这样,我想知道如何解决它?谢谢.
我有一个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,一切都像以前一样工作:深灰色被其他地方看到的浅灰色所取代.
在我的项目中,我使用UITableViewController内部UISearchController来过滤我的数据tableView.
我没有问题来过滤数据,但是tableView当我点击CANCEL按钮时我需要重新加载日期,UISearchController但是我找不到这个的委托方法...
你能帮我理解如何解决这个问题吗?
ios ×9
uisearchbar ×4
uitableview ×4
ios8 ×3
swift ×3
cocoa-touch ×2
objective-c ×2
ios11 ×1
iphone ×1
keyboard ×1
segue ×1
uikit ×1