gpt4 book ai didi

ios - UISearchBar 不会在 UISplitviewController Master 中响应

转载 作者:技术小花猫 更新时间:2023-10-29 10:27:03 24 4
gpt4 key购买 nike

我有一个非常标准的设置 UITableview作为 UISplitviewController 中的主 Controller , 通用 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;
无需在 iPhone 上按预期显示我的其余代码、搜索和所有工作.我的问题是搜索栏在 iPad 上运行时永远不会获得焦点或显示键盘.没有反应,似乎没有收到触摸。甚至不响应以编程方式尝试 becomeFirstResponder .
什么都不会发生。
搜索栏可见且放置得当,没有底层或覆盖问题。
它在 iPhone 上运行良好.接收触摸,呈现键盘,搜索工作。据推测,当 UISplitviewController 时,呈现方式存在重大差异。折叠了。经过数小时的搜索、翻阅文档和我遇到的每一个教程,我都没有发现类似的经历,这令人惊讶。
附加说明:如果我在 iPad 上使用多任务处理将拆分 View 缩小到折叠状态,则搜索栏将起作用,与 iPhone 相同。 .它肯定与拆分 View 的折叠状态有关。
更新:(越来越近)
经过进一步的实验,我发现如果您以横向方式启动应用程序,搜索栏可以在 iPad 上运行。在纵向模式下,我的主 Controller 是隐藏的。它通过选择 displayModeButtonItem 滑入,设置为 leftBarButtonItem细节 Controller 。那是 searchBar 中断并且不再响应触摸的时候。
如果我从横向开始,然后旋转到纵向,它也会停止工作。旋转回横向并不能修复它。一旦坏了,它就会一直坏到重新启动。
我试着搬家 definesPresentationContextviewWillAppear主 Controller 的方法,但没有效果。
进一步更新:
另一个意外的情况是,iPhone 6plus 上的搜索栏完全没有问题。无论方向如何,折叠与否都可以工作,并且它开始处于哪个状态无关紧要。我希望这在横向时与 iPad 相同。完全适用于 iPhone .
我还没有弄清楚这一点。我最近尝试修复,我将所有搜索 Controller 初始化移至 viewDidLayoutSubviews方法。没有任何变化。
另外,我注意到当搜索处于事件状态时,屏幕上的键盘,如果我旋转 iPad,键盘就会消失,但搜索栏仍然处于事件状态。一开始我没有意识到,然后我看到取消按钮仍然显示。它不会接收触摸并且没有键盘,但它显然仍然是第一响应者。
上传到 GitHub 的示例项目:
Github Repository
注意 - 在我将 UISplitview Delegate 方法添加到项目之前没有问题。我想立即将此添加到我的问题中,因此,我什至还没有尝试确切了解这些委托(delegate)方法如何影响搜索栏,但显然问题是在某处创建的。
更新:
我尝试了更多变体,但没有成功。
  • 将搜索栏移动到部分标题。没有喜悦。
  • 将搜索栏放在 UIView 中作为内容 View 。没有喜悦。
  • 删除搜索栏消失,重新插入确实出现。没有喜悦。
  • 操纵搜索栏框架的大小以确保它不被剪裁。没有喜悦。

  • 我还查看了分析器中的 View 层次结构,搜索栏是顶级的,没有被其他任何东西覆盖。
    最后包装:
    @tomSwift 解决方法确实纠正了我在 iPad 上的问题。在进一步测试中,我发现它破坏了我的 iPhone UI。据推测,这与我自己的设置和主/细节 View Controller 的创建时间有关。似乎一些重要的对象不再及时创建,因为细节 View Controller 可能还不存在。我通过将关键项目移动到 App Delegate 来解决问题,但这变得笨拙而且我无法轻松缩小范围,因此我使用以下方法进行了修复:
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
    }
    可能会有更优雅的解决方案,但这已经花费了我足够的时间。现在一切正常。雷达归档 - 28304096

    最佳答案

    这显然是 UISplitViewController 中的一个错误和/或 UISearchController .当然,使用 Apple 提交雷达并附上您的代码示例。

    我认为该错误涉及 UISplitViewController.displayMode UISplitViewControllerDisplayModeAutomatic .当我更改 preferredDisplayModeUISplitViewControllerDisplayModeAllVisible然后一切开始工作:

    - (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 上纵向的默认布局,据我所知,这可能并不理想。我也玩过设置 preferredDisplayModeUISplitViewControllerDisplayModeAllVisible最初然后将其设置回 UISplitViewControllerDisplayModeAutomatic ;这很好用,直到屏幕方向改变 - 然后它又坏了。沿着这条路走得更远,你可能会有一些运气。

    我还在 AppDelegate中做了以下添加, 强制搜索 Controller 在 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 中响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39369573/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com