我遇到了UISearchController的问题,如果我在搜索栏中有文本并关闭它所在的VC,则searchBar不会消失,只是保持在屏幕上与其他VC中的所有内容重叠.如果你点击取消按钮它会崩溃.
在SO上尝试了一些解决方案,但没有一个有效.:/
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.hidesNavigationBarDuringPresentation = false
controller.searchBar.sizeToFit()
controller.searchBar.searchBarStyle = UISearchBarStyle.Minimal
controller.searchBar.barTintColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1)
controller.searchBar.tintColor = UIColor.blackColor()
controller.definesPresentationContext = true
controller.edgesForExtendedLayout = UIRectEdge.None
self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0)
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助!
更新:所以我找到了一个不太好的解决方案,即在viewWillDisappear中设置.active = false.但问题是,在完全消失之前,searchBar工件将在下一个/上一个VC上显示一秒钟.
我有一个表视图控制器,UISearchController其设置 UISearchBar为tableView.tableHeaderView.当更新搜索结果,我用的是beginUpdates和endUpdates和相关方法来更新表视图中的数据.
这使搜索栏消失; 将tableHeaderView其设置UIView为与搜索栏大小相同的空,通用.如果我只是使用reloadData而不是整个beginUpdates/ endUpdates程序,一切都很好.
表视图控制器嵌入在常规视图控制器中; 没有涉及导航控制器.这是重现问题所需的表视图控制器的整个实现:
- (void)viewDidLoad
{
[super viewDidLoad];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.tableView.tableHeaderView = self.searchController.searchBar;
}
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
Run Code Online (Sandbox Code Playgroud)
为什么这会导致搜索栏被替换为空白视图,如何避免?
我试图使用UISearchController在地图视图上搜索目的地.我希望UISearchBar出现在导航栏中,但我似乎无法在没有显示右侧的取消按钮的情况下这样做:

这个取消按钮有时会消失,而我正在玩耍,但我现在无法让它显示我的搜索表显示我想要它:

我肯定必须有一些我做得有点小错误的东西,但我无法弄清楚它是什么......
self.resultsViewController = [UITableViewController new];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.resultsViewController];
self.searchController.searchResultsUpdater = self;
self.searchController.hidesNavigationBarDuringPresentation = false;
self.searchController.delegate = self;
self.searchBar = self.searchController.searchBar;
self.searchBar.placeholder = self.stage.title;
self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
self.definesPresentationContext = true;
self.navigationItem.titleView = self.searchBar;
self.resultsTableView = self.resultsViewController.tableView;
self.resultsTableView.dataSource = self;
self.resultsTableView.delegate = self;
Run Code Online (Sandbox Code Playgroud) 我在iOS 8中使用UISearchController,并在viewDidLoad中使用嵌入在选项卡控制器中的视图控制器中的以下intializait
_searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
_searchBar = _searchController.searchBar;
[_searchController.searchBar sizeToFit];
_searchController.searchBar.delegate = self;
_searchController.searchResultsUpdater = self;
_searchController.dimsBackgroundDuringPresentation = NO;
_searchController.hidesNavigationBarDuringPresentation = NO;
self.definesPresentationContext = NO;
_shopsTable.tableHeaderView = _searchController.searchBar;
Run Code Online (Sandbox Code Playgroud)
我已经实施了
- (void) updateSearchResultsForSearchController:(UISearchController *)searchController 和 (void)filterContentForSearchText:(NSString *)searchText
并且搜索工作,tableview正确更新等.
但!
如果我在搜索控制器处于活动状态时切换选项卡(只需点击搜索栏或某些文本)到另一个选项卡,然后返回到搜索选项卡,我会得到一个只有搜索栏的空白屏幕,就像这样
在这种情况下,我搜索开头的东西lar,它确实返回结果并正确地显示它们.但如果我切换标签,然后返回搜索标签,我会得到一个这样的空白屏幕.如果我这样做,控制器返回其原始状态的唯一方法_searchController.active = NO.但是,如果用户想要保持该搜索活动,我不能只是停用它.
我确信我遗漏了一些东西,但由于在UISeachController中没什么可做的,我无法弄清楚是什么导致了这个...
我有一个带有搜索栏的表格视图tableHeaderView,由a管理UISearchController.我使用标准的UISearchController演示动画.
我想为与searchBar动画具有相同持续时间的另一个视图设置动画.我尝试了各种持续时间值但是它们在任何时候都不完全匹配.
所以我认为使用-[UIViewControllerTransitionCoordinator animateAlongsideTransition:completion:]API 会很棒.
不幸的是我找不到<UIViewControllerTransitionCoordinator>对象的引用.具体来说searchController.presentingViewController.transitionCoordinator就是nil.
当用户将注意力集中在导航栏上搜索栏下方的搜索栏时,我正在尝试为UISearchController的"位置"输入添加另一个文本字段.
我拥有的例子以及我希望它去的地方:

我尝试过这样的东西,但是不起作用:
var searchController: UISearchController!
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
var myTextField: UITextField = UITextField(frame: CGRect(x: 0, y: 0, width: 200.00, height: 40.00))
myTextField.backgroundColor = UIColor.purpleColor()
myTextField.text = "Location"
myTextField.borderStyle = UITextBorderStyle.None
searchController.view.addSubview(myTextField)
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒!谢谢.
uitextfield uisearchdisplaycontroller swift uisearchcontroller
在我的代码中,这是我设置的方式UISearchController:
searchResultController = storyboard!.instantiateViewControllerWithIdentifier(DBSearchResultControllerIdentifier) as! DBSearchResultController
searchController = UISearchController(searchResultsController: searchResultController)
searchController.searchResultsUpdater = self
searchController.delegate = self
searchResultController.tableView.tableHeaderView = searchController.searchBar
Run Code Online (Sandbox Code Playgroud)
我采取的一些行动是:
@IBAction func cityButtonTapped(sender: UIButton) {
searchController.active = true
}
Run Code Online (Sandbox Code Playgroud)
但后来我有一个错误:
应用程序试图在自身上呈现模态视图控制器.提出控制器是
UISearchController: 0x7f9a0c04a6a0
第一次应用程序的这部分加载搜索控制器的搜索栏的光标显示,根据需要.
(问题)当搜索被解除然后(稍后)重新编码时,没有光标:
这是可重复的,只是加载/解除,即没有任何显然可以/应该改变事物的色调,导致光标是背景的颜色(通常是缺少光标的答案,从我看到的SO Q&As)这个话题.)也就是说,没有别的东西不能工作,只是光标消失了.
一些(可能)复杂因素:
我已经做了各种尝试让孩子VC创建它自己的SearchController,和/或在根VC上使用它,依此类推.各种排列似乎都有效,但同样存在缺陷.(因此,我觉得我在寻找问题/解决方案来源的错误位置.)
我不能排除光标颜色已经改变,我不完全理解它是如何设置/继承的,特别是考虑到我拥有的VC堆栈,以及如何在调试器中测试它.我认为这就像我设置全局色调一样简单.
注意:这个程序是用故事板直接设置,并没有使用外观代理多.这说它有:
// Default tint for application...
UIApplication.sharedApplication().delegate?.window??.tintColor = mainBrandColor
UIToolbar.appearance().tintColor = mainBrandColor
Run Code Online (Sandbox Code Playgroud)
...我尝试过UISearchBar的各种排列,UINavigationBar色调通过外观代理w /相同的行为(首先工作,后来没那么多.)在不同时间,(即工作时和不工作时)看这个显示相同的颜色:
(lldb) po searchController.searchBar.tintColor
Run Code Online (Sandbox Code Playgroud)
注意:单独使用UISearchController(当调用VC不是容器的子代,而是推送VC时)并不能证明这个问题.光标保持正确的颜色.
环境:这是Swift on XCode 7.1上的iOS9.x应用程序.
这是一些代码,其中homeVC是父/容器VC:
if nil == homeVC.searchController {
homeVC.searchController = UISearchController(searchResultsController: nil)
homeVC.searchController!.searchResultsUpdater = self
homeVC.searchController!.delegate = self
homeVC.searchController!.searchBar.delegate = self
homeVC.searchController!.searchBar.showsCancelButton = false
homeVC.searchController!.searchBar.returnKeyType = .Done
homeVC.searchController!.searchBar.placeholder = "Add Item"
homeVC.searchController!.searchBar.searchBarStyle = UISearchBarStyle.Minimal
homeVC.searchController!.dimsBackgroundDuringPresentation = false
homeVC.searchController!.hidesNavigationBarDuringPresentation = …Run Code Online (Sandbox Code Playgroud) 我有一个UISearchController,其searchBar设置为我的tableView的tableHeaderView:
tableView.tableHeaderView = searchController.searchBar
Run Code Online (Sandbox Code Playgroud)
根据我的阅读,UISearchController适用于iOS8及更高版本.所以我不明白为什么它的searchBar没有显示在我的iOS8设备上.
ios ×9
swift ×5
uisearchbar ×5
cocoa-touch ×2
uikit ×2
uitableview ×2
ios8 ×1
objective-c ×1
uitextfield ×1
xcode ×1