UISearchDisplayController

UISearchDisplayController

我正在编写一个SplitView iPad应用程序。在DetailViewController内部,有一个小 View ,其中包含UITableViewUISearchBar及其 Controller 。该 View 不代表为DetailViewController保留的整个屏幕空间。实际上,它仅使用一半。另一半上有一个UIImageView

这就是麻烦所在:每次我使用搜索栏时,displaycontroller(我认为)都会使DetailViewController内部的所有内容(包括 ImageView )变暗。这与运行该应用程序时人们期望的不一致。有什么方法可以将框架调暗?或者至少永久禁用调光?

提前致谢。

最佳答案

您是对的,正是UISearchDisplayController管理着您所看到的“变暗”效果。

UISearchDisplayController所做的是将UIControl作为 subview 添加到searchContentsController的 View (UISearchDisplayController的属性),它可能是您的详细 View Controller 。这个UIControl只是一个带有灰色背景的Alpha View 。它似乎有一个内部触摸事件处理程序,当点击该事件处理程序时便结束了搜索。

要将调光效果限制到详细信息 View 的 subview ,您需要做三件事。 (我假设您的详细 View Controller 是通过xib定义的。如果没有,这些步骤也可以在代码中完成。)

1)在您的detail-view-controller xib中添加一个新的UIViewController。将此新的 View Controller 附加到detail-view-controller的IBOutlet。在我的示例中,我将此称为“_searchAreaViewController”。即使您永远不会访问 View Controller ,这也很重要(但请记住,您必须在某个时候释放它)

@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate, UITableViewDelegate, UITableViewDataSource> {

    UIPopoverController *popoverController;
    UIToolbar *toolbar;

    id detailItem;
    UILabel *detailDescriptionLabel;

    IBOutlet UIViewController* _searchAreaViewController;
}

2)使您的搜索区域的包含 View 成为此新 View Controller 的 View 。为此,可以使用Interface Builder通过将导出拖动到searchAreaViewController并选择“view”导出来为此 View 设置新的引用导出。您必须具有一个包含 View -它应该是详细 View 的 subview ,并且应该包含UISearchBar以及可能的UITableView。

3)使UISearchDisplayController的searchContentsController属性引用此新 View Controller ,而不是detail-view-controller。这只能通过Interface Builder来完成,因为该属性是只读的(IB可以使它正常工作吗?)如果需要通过代码执行此步骤,则必须子类化UISearchDisplayController并从a中返回正确的值。 “searchContentsController”的属性覆盖。

我制作了一个示例应用程序来演示这一点,我必须添加到SplitView模板中的唯一一行代码是上述步骤1中列出的代码。其他一切只是添加 View / Controller 并在IB中正确连接它们。

祝你好运!

关于ios - UISearchDisplayController不调光?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3527927/

10-13 08:19