再次,标准票价,我插入一个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;
在iPhone上不需要显示我的代码,搜索和所有工作,如预期的.我的问题是,在iPad上运行时,搜索栏没有得到关注或显示键盘.没有回应,似乎没有接受触动.甚至没有以编程方式尝试成为第一个响应程序.
什么都没发生.
搜索栏是可见的并且放置适当,没有底层或叠加问题.
它在iPhone上正常工作.接受触摸,呈现键盘,搜索作品.当UISplitvIEwController崩溃时,可能会有显着的差异.有了几个小时的搜索,通过文档和我遇到的每个教程,我没有找到类似的经验,这是令人惊讶的.
附加说明:如果我使用多任务来缩小拆分视图以在iPad上折叠,则搜索栏的工作方式与iPhone相同.它绝对与拆分视图的折叠状态有关.
更新:(越来越近)
经过进一步的实验,我发现搜索栏在iPad上运行,如果你开始在这个应用程序.在纵向模式下,我的主控制器被隐藏.它通过选择displayModebuttonItem进行滑动,该displayModebuttonItem设置为详细控制器的leftbarbuttonItem.那就是当searchbar中断并且不再响应触摸时.
如果我从风景开始,然后旋转到纵向,它也停止工作.旋转回景观不能修复它.一旦破裂,它一直崩溃,直到重新启动.
我尝试将definePresentationContext移动到主控制器的vIEwWillAppear方法,但没有任何效果.
进一步更新:
另一个意想不到的情况是,iPhone 6plus上的搜索栏完全没有问题.无论方向如何,折叠或不起作用,无论哪个状态开始都不重要.我希望在横向上与iPad相同.完全在iPhone上工作
我还没有想到这一点.我最近尝试修复,我将所有的搜索控制器初始化移动到vIEwDIDLayoutSubvIEws方法.没有变化
此外,我注意到,当搜索激活时,屏幕上的键盘,如果我旋转iPad,键盘会消失,但搜索栏保持活动.我没有意识到,然后我看到取消按钮仍然显示.它不会接收到触摸,没有键盘,但它显然仍然是第一响应者.
示例项目上传到GitHub:
Github Repository
注意:直到我将UISplitvIEw Delegate方法添加到项目中才有问题.我想立即将其添加到我的问题中,所以我甚至还没有试图看到这些委托方法如何影响搜索栏,但显然问题是在某处创建的.
更新:
我尝试了更多的变化,没有成功.
>将搜索栏移动到节标题.没有快乐
>将搜索栏放在UIVIEw中作为内容视图.没有喜悦
>删除搜索栏消失,重新插入就出现了.没有喜悦
> *** 作搜索栏框的大小,以确保它不被剪切.没有喜悦
我也在分析器中查看视图层次结构,搜索栏是顶级的,没有被其他任何东西覆盖.
最后包装:
@tomSwift解决方法在iPad上更正了我的问题.进一步测试,我发现它打破了我的iPhone界面.大概这是我自己的设置和创建主/详细视图控制器的时间更多的问题.似乎一些重要的对象不再是及时创建的,因为细节视图控制器还不存在.我通过将关键项目移动到App Delegate中来解决问题,但这变得笨拙,我无法轻松缩小,所以我用
if (UI_USER_INTERFACE_IdioM() == UIUserInterfaceIdiomPad) { splitVIEwController.preferreddisplayMode = UISplitVIEwControllerdisplayModeAllVisible;}
可能会有一个更优雅的解决方案,但这已经足够了我的时间.一切工作现在雷达提交 – 28304096
解决方法 这显然是UISplitVIEwController和/或UISearchController中的错误.当然,请提供一个与苹果相关的雷达并附上您的代码示例.我认为这个BUG涉及UISplitVIEwController.displayMode UISplitVIEwControllerdisplayModeautomatic.当我将preferreddisplayMode更改为UISplitVIEwControllerdisplayModeAllVisible时,一切都开始工作:
- (BOol)application:(UIApplication *)application dIDFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // OverrIDe point for customization after application launch. UISplitVIEwController *splitVIEwController = (UISplitVIEwController *)self.window.rootVIEwController; UINavigationController *navigationController = [splitVIEwController.vIEwControllers lastObject]; navigationController.topVIEwController.navigationItem.leftbarbuttonItem = splitVIEwController.displayModebuttonItem; splitVIEwController.delegate = self; splitVIEwController.preferreddisplayMode = UISplitVIEwControllerdisplayModeAllVisible; return YES;}
这个改变的主要原因是iPad上的纵向的默认布局,我明白可能不是理想的.我也玩过设置首选显示模式到UISplitVIEwControllerdisplayModeAllVisible,然后将其设置回UISplitVIEwControllerdisplayModeautomatic;这一切都很好,直到屏幕方向发生变化,然后再次破裂.你可能会有一些运气进一步走下去.
我还在AppDelegate中添加了以下内容,强制搜索控制器在displayMode更改时停用. (我还必须在MasterVIEwController上公开公开searchController属性).
- (voID)splitVIEwController:(UISplitVIEwController *)svc willChangetodisplayMode:(UISplitVIEwControllerdisplayMode)displayMode { UINavigationController *navigationController = [svc.vIEwControllers firstObject]; MasterVIEwController* mvc = (MasterVIEwController*) navigationController.topVIEwController; [mvc.searchController setActive: NO];}总结
以上是内存溢出为你收集整理的ios – UISearchBar将不会在UISplitviewController Master中响应全部内容,希望文章能够帮你解决ios – UISearchBar将不会在UISplitviewController Master中响应所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)