我有一个UITableView带有UISearchController搜索栏的UINavigationBar,一切都很完美,但是当我按下搜索结果的结果时UISearchController,我回来了UITableView下NavBar,这就是我初始化的方法UISearchController:
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.delegate = self;
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.delegate = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.searchController.searchBar.placeholder = NSLocalizedString(@"Local Search", @"");
self.searchController.searchBar.frame = CGRectMake(0, -5, [UIScreen mainScreen].bounds.size.width, 44);
ctrl = [[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 44)];
ctrl.backgroundColor = [UIColor clearColor];
ctrl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[ctrl addSubview:self.searchController.searchBar];
self.navigationItem.titleView = ctrl;
self.definesPresentationContext = YES;
Run Code Online (Sandbox Code Playgroud)
搜索栏完美地显示在UINavigationBar,然后当我搜索某些内容时,我按下一个结果的视图控制器:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:indexPath animated:YES]; …Run Code Online (Sandbox Code Playgroud) objective-c uinavigationbar uitableview ios uisearchcontroller
我想在Swift中创建与Apple的地图应用程序类似的功能.无论如何将UISearchController集成到常规视图中(即:不是UITableView).在连接的搜索栏内单击后,通过Storyboard删除一个导致崩溃.或者有什么方法可以用UITableView实现这个结果?
我正在尝试在tableViewController中使用新的UISearchController.
但是当我像使用旧的searchDisplayController一样按下searchBar时,我对它如何在navigationController中向上移动有点困惑?
目前它只是停留在表头.
这是我的代码:
self.teamSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchBar.searchBarStyle = UISearchBarStyle.Minimal
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()
controller.searchBar.showsScopeBar = true
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
Run Code Online (Sandbox Code Playgroud)
控制器:

当我点击搜索栏时:

我正在使用UISearchController在UITableView中显示搜索栏和结果.我设法正确设置它,但是当我搜索结果然后选择tableview中的一行,并将新的视图控制器推送到导航堆栈时,我希望搜索栏不再可见.但是,当我尝试这个时,第一个视图控制器中的搜索栏在第二个视图控制器中可见:
if (self.searchController == nil) {
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchBar.scopeButtonTitles = @[];
self.searchController.searchBar.delegate = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
}
Run Code Online (Sandbox Code Playgroud)
一种选择是调用self.searchController setActive:NO]内部didSelectRowAtIndexPath:但没有办法在没有每次从中选择搜索结果时关闭搜索栏的分散动画的情况下执行此操作.
有没有人有同样的问题?有没有办法告诉UISearchController在推送时隐藏搜索栏?我在使用UISearchDisplayController时工作正常
uitableview uisearchbar uisearchdisplaycontroller ios uisearchcontroller
我想重新创建iOS 7/8日历应用程序中显示的搜索UI.以模态方式呈现搜索UI不是问题.我使用UISearchController和模态呈现它就像UICatalog示例代码显示,它给了我一个很好的下拉动画.尝试从结果视图控制器推送视图控制器时出现问题.它没有包裹在导航控制器中,所以我无法推动它.如果我将它包装在导航控制器中,那么当我呈现时,我没有得到默认的下拉动画UISearchController.有任何想法吗?
编辑:我通过将结果视图控制器包装在导航控制器中来推动它.但是,在将新VC推入堆栈后,搜索栏仍然存在.
编辑(2):Apple的DTS表示日历应用程序使用非标准方法从搜索结果中推送.相反,他们建议从搜索控制器中移除焦点,然后将焦点推向并返回pop.这类似于我想象的设置应用程序中的搜索方式.
我UITableview在UISplitviewController通用iOS9应用程序中有一个非常标准的主控制器设置.
再次,标准票价,我插入一个UISearchBar作为表的标题.
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.hidesNavigationBarDuringPresentation = NO;
[self.searchController.searchBar sizeToFit];
self.tableView.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = YES;
Run Code Online (Sandbox Code Playgroud)
无需显示我的其余代码,搜索和所有按预期工作的内容iPhone.我的问题是搜索栏在运行时不会获得焦点或显示键盘iPad.没有回应,似乎没有接受.甚至没有响应以编程方式尝试becomeFirstResponder.
什么都没发生.
搜索栏可见且放置正确,没有底衬或叠加问题.
它工作正常iPhone.接收触摸,呈现键盘,搜索工作.据推测,UISplitviewController折叠时的呈现方式存在重大差异.通过几个小时的搜索,浏览文档和我遇到的每个教程,我都没有找到类似的经历,这是令人惊讶的.
附加说明:如果我使用多任务处理将分割视图缩小到iPad上折叠,则搜索栏将起作用,与之相同iPhone.它肯定与拆分视图的折叠状态有关.
经过进一步的实验,我发现如果您在横向上启动应用程序,搜索栏将在iPad上运行.在纵向模式下,我的主控制器被隐藏.它通过选择displayModeButtonItem设置为leftBarButtonItem细节控制器的滑入.那时,searchBar会中断并且不再响应触摸.
如果我从横向开始,然后旋转到肖像,它也会停止工作.旋转回景观并不能解决问题.一旦破裂,它会一直保持破碎状态直到重启.
我试着转向主控制器definesPresentationContext的viewWillAppear方法,但这没有效果.
另一个意想不到的情况是iPhone 6plus上的搜索栏完全没有问题.无论方向,折叠或否,都可以工作,无论它起始于哪个状态都无关紧要.我希望在横向时这与iPad相同.完全工作iPhone.
我还是没想出来.我最近尝试修复,我将所有搜索控制器初始化移动到该viewDidLayoutSubviews方法.没有任何改变.
此外,我注意到当搜索处于活动状态时,键盘在屏幕上,如果我旋转iPad,键盘会消失,但搜索栏仍保持活动状态.起初我没有意识到,然后我看到取消按钮仍然显示.它不会接受触摸,也没有键盘,但它显然仍然是第一响应者.
示例项目上传到GitHub: Github存储库
注意 - 在我将UISplitview Delegate方法添加到项目之前没有问题.我想立即将此问题添加到我的问题中,因此,我还没有尝试确切地看到这些委托方法如何影响搜索栏,但显然问题是在某处创建的.
我尝试了一些更多的变化没有成功.
我想弄清楚当你想在单独的searchResultsController中显示结果时如何使用UISearchController - 我发现的每个指南,视频和教程都使用当前的viewController来呈现搜索结果,并像实例化UISearchController一样所以:
let searchController = UISearchController(searchResultsController: nil)
Run Code Online (Sandbox Code Playgroud)
但我想调暗视图并使用搜索结果呈现一个新的tableView,就像在App Store搜索上一样.所以我所做的是创建一个新的tableViewController,给它一个storyboard id,然后像这样实例化它:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let resultsController = storyboard.instantiateViewController(withIdentifier: "searchResults") as! UITableViewController
let searchController = UISearchController(searchResultsController: resultsController )
Run Code Online (Sandbox Code Playgroud)
这似乎工作.但是,我从这里开始就被困住了.我不知道如何在resultsController中显示搜索结果,将什么放在resultsController中的cellForRowAtIndexPath中等等.
任何帮助表示赞赏!
我试图使用标准UIRefreshControl和UISearchController上一个UITableViewController.然而,它看起来并不像它应该做的那样.刷新时,滚动会使导航栏留下一个大的空白区域,大概应该是微调器的位置:
我在GitHub上有一个示例项目.以下是控件的设置方法:
override func viewDidLoad() {
super.viewDidLoad()
let spinner = UIRefreshControl()
spinner.addTarget(self, action: #selector(refresh), for: .valueChanged)
refreshControl = spinner
searchController = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchController
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将刷新控件分配给属性UITableView而不是一个on UITableViewController,这没有什么区别.
有人遇到过同样的问题吗?
我附加UISearchController到navigationItem.searchControlleriOS上13这个工作得很好:我可以用最好的iOS的13式搜索栏。
但是,我希望默认情况下看到大标题和搜索栏。
我设置navigationItem.hidesSearchBarWhenScrolling = false是因为我想在我的屏幕上永久看到搜索,但默认情况下搜索栏会替换大标题。
有谁知道这怎么可能?
navigationItem.searchController = UISearchController(searchResultsController: nil)
navigationItem.hidesSearchBarWhenScrolling = false
Run Code Online (Sandbox Code Playgroud)
ios ×8
swift ×4
uitableview ×4
ios11 ×1
ios13 ×1
ios8 ×1
large-title ×1
objective-c ×1
uisearchbar ×1
xcode ×1