我有一个使用UISplitViewController的应用。在横向方向时,我们有时希望始终显示主视图,有时希望它像纵向一样自动隐藏。目前,此设置可以在app中调整。
这一切都运作良好,除了一件事。当我更改设置时,我希望自动隐藏设置立即生效,而不仅仅是下次旋转设备时(即,当 - splitViewController:shouldHideViewController:inOrientation:被调用时)。
是否有某种方法(以编程方式)强制UISplitViewController弹出/隐藏主视图,以便SVC将再次查询splitViewController:shouldHideViewController:inOrientation:方法?
非常感谢任何帮助。
答案 0 :(得分:3)
没有直接的方式。
一个功能性但又有点hacky的解决方案是设置一个委托并记录在显示/隐藏主服务器时传递给委托的barButtonItem。您可以使用它来触发按钮上的操作。但是,正如我所说,这不是一个很好的方式(并且将来可能会破坏):
- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc
{
_buttonItem = barButtonItem;
// ...
}
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)button
{
_buttonItem = nil;
// ...
}
- (void)toggleMasterVisible
{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[_buttonItem.target performSelector:_buttonItem.action];
#pragma clang diagnostic pop
}
答案 1 :(得分:0)
对于现有按钮,您可以添加此目标以达到您想要的效果:
[button addTarget: theSplitViewController action: @selector(toggleMasterVisible:) forControlEvents:UIControlEventTouchUpInside];
我必须假设这意味着你可以致电
[theSplitViewController toggleMasterVisible: nil];
这完全没有记录,但它与你从willHideViewController函数获得的barButtonItem具有相同的行为。