ios – UISearchBar将不会在UISplitviewController Master中响应

在UISplitviewController,通用iOS9应用程序中,我有一个非常标准的UITableview设置作为主控制器.

再次,标准票价,我插入一个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];
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple 最新软件的错误和性能问题。
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只有5%的概率会遇到选择运营商界面且部分必须连接到iTunes才可以激活
一般在接外包的时候, 通常第三方需要安装你的app进行测试(这时候你的app肯定是还没传到app store之前)。
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应用变灰了。那么接下来我们看一下Flutter是如何实现的。Flutter中实现整个App变为灰色在Flutter中实现整个App变为灰色是非常简单的,只需要在最外层的控件上包裹ColorFiltered,用法如下:ColorFiltered(颜色过滤器)看名字就知道是增加颜色滤镜效果的,ColorFiltered( colorFilter:ColorFilter.mode(Colors.grey, BlendMode.
flutter升级/版本切换
(1)在C++11标准时,open函数的文件路径可以传char指针也可以传string指针,而在C++98标准,open函数的文件路径只能传char指针;(2)open函数的第二个参数是打开文件的模式,从函数定义可以看出,如果调用open函数时省略mode模式参数,则默认按照可读可写(ios_base:in | ios_base::out)的方式打开;(3)打开文件时的mode的模式是从内存的角度来定义的,比如:in表示可读,就是从文件读数据往内存读写;out表示可写,就是把内存数据写到文件中;
文章目录方法一:分别将图片和文字置灰UIImage转成灰度图UIColor转成灰度颜色方法二:给App整体添加灰色滤镜参考App页面置灰,本质是将彩色图像转换为灰度图像,本文提供两种方法实现,一种是App整体置灰,一种是单个页面置灰,可结合具体的业务场景使用。方法一:分别将图片和文字置灰一般情况下,App页面的颜色深度是24bit,也就是RGB各8bit;如果算上Alpha通道的话就是32bit,RGBA(或者ARGB)各8bit。灰度图像的颜色深度是8bit,这8bit表示的颜色不是彩色,而是256
领导让调研下黑(灰)白化实现方案,自己调研了两天,根据网上资料,做下记录只是学习过程中的记录,还是写作者牛逼
让学前端不再害怕英语单词(二),通过本文,可以对css,js和es6的单词进行了在逻辑上和联想上的记忆,让初学者更快的上手前端代码
用Python送你一颗跳动的爱心
在uni-app项目中实现人脸识别,既使用uni-app中的live-pusher开启摄像头,创建直播推流。通过快照截取和压缩图片,以base64格式发往后端。
商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。CSDN前端领域优质创作者,资深前端开发工程师,专注前端开发,在CSDN总结工作中遇到的问题或者问题解决方法以及对新技术的分享,欢迎咨询交流,共同学习。),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;2.判断支付方式,如果是1,则是微信支付方式。1.判断是否在微信内支付,需要在微信外支付。
Mac命令行修改ipa并重新签名打包
首先在 iOS 设备中打开开发者模式。位于:设置 - 隐私&安全 - 开发者模式(需重启)
一 现象导入MBProgressHUD显示信息时,出现如下异常现象Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_MBProgressHUD", referenced from: objc-class-ref in ViewController.old: symbol(s) not found for architecture x86_64clang: error: linker command failed wit
Profiles >> 加号添加 >> Distribution >> "App Store" >> 选择 2.1 创建的App ID >> 选择绑定 2.3 的发布证书(.cer)>> 输入描述文件名称 >> Generate 生成描述文件 >> Download。Certificates >> 加号添加 >> "App Store and Ad Hoc" >> “Choose File...” >> 选择上一步生成的证书请求文件 >> Continue >> Download。
今天有需求,要实现的功能大致如下:在安卓和ios端实现分享功能可以分享链接,图片,文字,视频,文件,等欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~声明:本博文章若非特殊注明皆为原创原文链接。