【问题标题】:UISearchBar's set_cancelButtonText: ivar is prohibitedUISearchBar 的 set_cancelButtonText: ivar 被禁止
【发布时间】:2020-01-22 05:30:55
【问题描述】:

以前在 iOS 12 中允许使用相同的代码,但现在当我尝试在 iOS 13 上运行相同的代码时,它会崩溃并给我同样的错误:

由于未捕获的异常“NSGenericException”而终止应用程序, 原因:'访问 UISearchBar 的 set_cancelButtonText:ivar 是 禁止。这是一个应用程序错误'

与这行代码有关:

searchController.searchBar.setValue("Cancel".localized, forKey:"_cancelButtonText")

现在我知道 setValue 的访问现在被禁止了,但是如何克服这个崩溃并更改取消按钮的标题,因为搜索栏中不包含任何属性。

【问题讨论】:

  • 在您执行此操作时,您的应用是否会在 AppStore 上获得批准?
  • 其实还没试过。
  • 我认为 Apple 在 iOS 13 上采取的这一措施总比让你在应用提交时被一种含糊的拒绝信息迷住要好。访问此类 API 违反了 App Store 审查指南。这是非法的
  • 希望你现在得到线索
  • 我找到了解决办法。

标签: swift ios13


【解决方案1】:

您可以使用UIAppearance,而不是弄乱未记录的视图层次结构:

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "Whatever"

【讨论】:

    【解决方案2】:

    Objective-C 版本:

    [[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTitle:@"CancelText"];
    

    【讨论】:

      【解决方案3】:

      对于 Objective-C ,如果您对 UISearchController 有问题,可以使用它,或者根据您的使用情况进行更改。

      [[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[UISearchController class]]] prefersLargeTitles];
      

      【讨论】:

        【解决方案4】:

        UISearchDisplayController 自 iOS 8.0 起已弃用 避免使用它

        【讨论】:

          猜你喜欢
          • 2012-02-28
          • 2018-10-26
          • 2016-09-13
          • 2014-07-04
          • 2020-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多