这就是麻烦的来源:每次我使用搜索栏时,displaycontroller(我都假设)会使DetailViewController中的所有内容变暗,包括图像视图.这与人们在运行应用程序时的期望不一致.有没有办法将框架设置为暗灰色?或者至少禁用调光效果好?
提前致谢.
解决方法
UISearchDisplayController正在做的是将一个UIControl作为子视图添加到searchContentsController(UISearchDisplayController的一个属性)的视图中,这可能是您的详细视图控制器.这个UIControl只是一个灰色背景的alpha’d视图.它似乎有一个触摸式内部事件处理程序,在点击时结束搜索.
要将调光效果限制在细节视图的子视图中,您需要做三件事. (我假设您的详细视图控制器是通过xib定义的.如果没有,这些步骤也可以在代码中完成.)
1)在你的detail-view-controller xib中添加一个新的UIViewController.将此新视图控制器附加到详细视图控制器的IBOutlet.在我的例子中,我称之为“_searchAreaViewController”.这很重要,即使你不会访问视图控制器(但请记住,你必须在某个时候释放它)
@interface DetailViewController : UIViewController <UIPopoverControllerDelegate,UISplitViewControllerDelegate,UITableViewDelegate,UITableViewDataSource> { UIPopoverController *popoverController; UIToolbar *toolbar; id detailItem; UILabel *detailDescriptionLabel; IBOutlet UIViewController* _searchAreaViewController; }
2)使搜索区域的包含视图成为这个新视图控制器的视图.要执行此操作,请使用Interface Builder通过将插座拖动到searchAreaViewController并选择“视图”插座来为此视图设置新的参考插座.你必须有一个包含视图 – 它应该是你的详细视图的子视图,它应该包含UISearchBar,可能包含你的UITableView.
3)使UISearchDisplayController的searchContentsController属性引用这个新的视图控制器而不是detail-view-controller.这只能通过Interface Builder来完成,因为属性是只读的(IB有一些神奇的功能可以使它工作吗?)如果你需要通过代码执行这一步,你必须继承UISearchDisplayController并从中返回正确的值.属性覆盖“searchContentsController”.
我做了一个示例应用程序来演示这个,我必须添加到SplitView模板的唯一代码行是上面步骤1中列出的代码.其他一切只是添加视图/控制器并在IB中正确连接它们.
祝好运!