Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用UISearchDisplayController时,UISearchBar的作用域按钮在IOS 13上不起作用_Objective C_Uisearchbar_Uisearchdisplaycontroller_Ios13 - Fatal编程技术网

Objective c 使用UISearchDisplayController时,UISearchBar的作用域按钮在IOS 13上不起作用

Objective c 使用UISearchDisplayController时,UISearchBar的作用域按钮在IOS 13上不起作用,objective-c,uisearchbar,uisearchdisplaycontroller,ios13,Objective C,Uisearchbar,Uisearchdisplaycontroller,Ios13,我必须维护一个非常古老的大型objective-c项目。 在iOS12之前,一切都可以正常工作,但从iOS13开始,UISearchBar的范围按钮栏不能与UISearchDisplayController一起工作 我知道UISearchDisplayController已被弃用,但由于某些原因,我确实不想将其迁移到UIDisplayController。 我做了一些测试,发现问题可能与UIDisplayController有关,因为它会阻止用户触摸示波器按钮 我的代码如下: 上面的代码在IOS

我必须维护一个非常古老的大型objective-c项目。 在iOS12之前,一切都可以正常工作,但从iOS13开始,UISearchBar的范围按钮栏不能与UISearchDisplayController一起工作

我知道UISearchDisplayController已被弃用,但由于某些原因,我确实不想将其迁移到UIDisplayController。 我做了一些测试,发现问题可能与UIDisplayController有关,因为它会阻止用户触摸示波器按钮

我的代码如下:

上面的代码在IOS12之前也可以工作,但是从IOS13开始,我不能触摸scope按钮。我想问题与UIDisplayController类有关。 所以我想覆盖UIDisplayController的一些方法,但不知道如何开始。任何人都有这方面的经验。如有任何信息,将不胜感激。谢谢

我对Objective-C和IOS很陌生,我在谷歌上做了很多搜索,但运气不好

更新: 经过几天的调试,我通过覆盖UISearchBar类的hitTest方法解决了问题。下面的方法也可以做到这一点,它不是一种有文档记录的方法

@implementation MyUISearchBar

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    UIView * touchedView = [super hitTest:point withEvent:event];
    if(check version stuff){
        return touchedView;
    }
    UIView * scopeBar = [self performSelector:NSSelectorFromString(@"_scopeBar")];
    if(user touched the scopeBar){
        return scopeBar;
    }
    return touchedView;
}

希望对某些人有所帮助。

UISearchDisplayController不推荐使用,请改用UISearchController。 看这里 您必须迁移,因为UISearchDisplayController在iOS13中无法正常工作。 看看这个项目,这是如何管理UISearchController的好例子。
祝你好运

请花15秒钟阅读我的整个问题,然后再发布你的答案。这种回答只能被视为垃圾邮件。谢谢。我也有一个大项目,问题和你完全一样。我为您提供的这些示例帮助我解决了问题,现在scope按钮工作正常。我花了一天的时间才把所有的东西整理好。当你问问题时,请先做些调查。谢谢你的帮助。当然,在这里提出问题之前,我做了很多研究。我不知道你的项目有多大,有多旧,但就我而言,它不能在一两个工作日内完成。这不仅仅是寻找和替换东西。它需要比您给出的示例多得多,尽管有成千上万的示例和教程比您给出的关于UISearchController的示例和教程更容易理解。不仅是范围按钮,您还必须更改取消按钮的操作,用户触摸框外时的处理方式,数据填写方式。。。。并向您的客户解释……我的遗留项目在调试器下编译并运行良好,但因启动时崩溃而被苹果公司拒绝。app review团队提供的符号化崩溃日志显示,这是由于其中一个视图中存在UISearchDisplayController。因此,如果您的应用程序是通过应用商店分发的,则您>必须@implementation MyUISearchBar - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView * touchedView = [super hitTest:point withEvent:event]; if(check version stuff){ return touchedView; } UIView * scopeBar = [self performSelector:NSSelectorFromString(@"_scopeBar")]; if(user touched the scopeBar){ return scopeBar; } return touchedView; }