我希望在我的 ViewController 上创建一个 UISearchController,其中包含一个 UITableView(不是 UITableViewController)。我有 2 个警告和一个崩溃,不确定它们是否相关 - 但要知道我的问题之一是警告
'Imcompatiable pointers types sending UITableView to parameter of type UIViewController.'
Run Code Online (Sandbox Code Playgroud)
显然,这是因为我试图将 searchResultsController 设置为我的 UIViewController 上的 tableView,而不是像这样的 UITableViewController:
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.myTableView];
Run Code Online (Sandbox Code Playgroud)
self.myTableView 是 UITableView,我将如何解决这个问题?我是否必须将我的 tableView 转换为 UITableViewController 才能使其正常工作?提前致谢。
当我弹出当前的ViewController时,我想从用户界面中删除searchBar。现在,我这样做:
override func viewWillDisappear(animated: Bool) {
resultSearchController.active = false //Need improvement here. remove animation
super.viewWillDisappear(animated)
}
Run Code Online (Sandbox Code Playgroud)
这里发生的是UISearchController被关闭了,但是带有动画...而且在当前状态下看起来非常糟糕。我希望它回到没有动画的初始状态,然后viewController消失并带有自己的动画。
我设置了这样一个UISearchController:
searchResultsController = SearchResultsController()
searchController = UISearchController(searchResultsController: searchResultsController)
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = true
searchController.searchBar.searchBarStyle = .minimal
searchController.delegate = self
definesPresentationContext = true
navigationItem.titleView = searchController.searchBar
Run Code Online (Sandbox Code Playgroud)
SearchResultsController只是一个UITableView用于显示搜索结果的视图控制器.
当设备处于纵向状态时,开始在纵向模式下搜索,表视图顶部有一个额外的空间(RESULT标题是表视图的开头)
然后,如果我旋转到横向模式,空间消失:
当设备处于横向模式并且我开始搜索时,表格视图被切断:
然后如果我旋转到肖像,表视图完全适合:
额外的空间高度与状态栏高度完全相同.所以我想知道这里有一些与状态栏有关的东西.
如果我将搜索栏指定为表视图,则不会发生这种情况tableHeaderView.只有当搜索栏在导航标题中时才会发生.谁知道为什么?
我在 UITableView 的标题中使用 UISearchController 的 UISearchBar。我的搜索工作正常,因为当我在搜索栏的字段中输入一些文本时,所有相关方法都会被调用,并且表格视图会按预期显示正确的搜索结果。
当我想利用其中一个结果对其进行处理时,问题就出现了。一旦我点击表视图单元格之一,搜索栏中的字段就会变为空。由于搜索文本现在是空的,搜索结果被更新,表格视图重新加载零结果。所以点击表格单元格什么也不做,因为表格单元格不再存在。
我可以通过更新我的updateSearchResultsForSearchController:方法在搜索字符串为空时不更新搜索结果来解决大部分问题。这工作正常。但无论如何,我仍然希望搜索文本保留在搜索字段中,这是我问题的关键......
为什么我的搜索文本从搜索字段中消失了,当我点击其他地方时,如何防止搜索字段变空?
这是我设置搜索栏和搜索控制器的方法:
- (void)viewDidLoad {
[super viewDidLoad];
searcher = [[UISearchController alloc] initWithSearchResultsController:nil];
searcher.searchResultsUpdater = self;
searcher.delegate = self;
searcher.definesPresentationContext = YES;
resultsTable.tableHeaderView = searcher.searchBar;
Run Code Online (Sandbox Code Playgroud)
编辑:我注意到当搜索栏有焦点时表格视图单元格变暗。所以我认为搜索控制器正在捕获所有触摸,并且可能将它们作为“取消”操作来处理。如果是这样,我该如何阻止它以这种方式取消?
我对 UISearchController 很陌生,所以如果这是一个愚蠢的问题,请原谅。
我尝试关注这个问题,但无法得到我想要的结果。
在我的中,MapViewController's viewDidLoad我像这样初始化搜索控制器:
searchController = UISearchController(searchResultsController: customViewController)
其中 customViewController 是 UIViewController 的子类,现在有一些文本标签(通过界面构建器)。(我这样声明:let customViewController = MyCustomeViewController()
我试图通过隐藏和取消隐藏委托方法中的searchResultsControllerwith来遵循上述链接searchController.searchResultsController?.view.isHidden = false,但没有运气。
结果是一样的:只有视图变暗。
理想情况下,我希望它类似于 Facebook 的应用程序,当您点击搜索栏时,它会显示不同的视图。
我searchResultsController在委托中打印了对象,willPresentSearchController它确实将其指示为MyCustomViewController.
我在这里遗漏了什么还是这不是正确的方法?
设置
一个简单的视图控制器,在导航项中设置了 UISearchController 以在搜索栏中使用 iOS 11 的搜索功能。
任何具有顶部约束的视图 SafeArea.Top
问题
当呈现搜索控制器时,导航栏因为它的大小变化而被动画化,但对顶部区域的约束不遵循动画。
如果有人知道我能做什么(现在我想我唯一的选择是禁用hidesNavigationBarDuringPresentation以避免动画)
请参阅下面的示例,其中我激活了慢速动画以便于理解:
我在导航控制器中有一个表视图,以便我可以将详细视图控制器推送到堆栈上。它工作正常,直到我向导航项添加搜索控制器,如下所示:
searchController = UISearchController(searchResultsController: nil)
searchController.obscuresBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.delegate = self
searchController.searchBar.tintColor = Colors.mlLabel
navigationItem.searchController = searchController
definesPresentationContext = true
Run Code Online (Sandbox Code Playgroud)
它导致临时灰色背景,见下文:
在调试视图层次结构时,看起来UIViewControllerWrapperView's _UIParallaxDimmingView(在下面选择)是导致这种情况的原因,因为导航栏和状态栏都是透明的。
我怎样才能解决这个问题?
注意:将animated属性设置pushViewController()为false有效,但我想保留动画。
更新:这似乎只在 iOS 13 上有问题。甚至可能来自最近的某个版本,因为我之前没有这个问题。
更新 2:我现在在我的应用程序中的多个地方都注意到了同样的问题,而且它不仅仅是与SearchController. 基本上_UIParallaxDimmingView它的鼻子伸出来。
uinavigationbar uinavigationcontroller pushviewcontroller ios uisearchcontroller
我看到dimsBackgroundDuringPresentationiOS SDK 12 现在已弃用。此属性的替代品是什么?
我正在尝试使用UISearchController为我的iphone应用程序显示一个简单的搜索屏幕.我使用了UITableViewController和UISearchController,它嵌入在UINavigationController中


我想做的是直接获得状态2而不进入状态1
我试图添加此代码
presentViewController(searchController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
但它要么不显示搜索栏,如果动画是假的,或者显示它我想要但是在不必要的过渡后暂时显示导航栏
我正在使用UISearchController作为导航栏的一部分,使用iOS 11中引入的新API.我在ViewController的viewDidLoad中以下列方式使用它
- (void)viewDidLoad {
[super viewDidLoad];
[_table setDataSource:self];
[_table setDelegate:self];
searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
[self.navigationItem setSearchController:searchController];
[self.navigationItem setHidesSearchBarWhenScrolling:NO];
[searchController.searchBar setBackgroundColor:[UIColor greenColor]];
}
Run Code Online (Sandbox Code Playgroud)
但是,搜索文本字段将呈现在搜索栏内的错误位置.请看下面的截图.
我检查了视图层次结构,发现搜索栏中的UISearchBarTextField对象(不能直接访问devs)的frame.y值为1,这可能导致此问题.我已经在iOS 11 beta 10和iOS 11 GM上测试了这个.
这是一个已知的问题?有没有解决这个问题?或者是我在我身上做错了什么?
任何帮助将不胜感激 (: