以编程方式显示/隐藏UISplitViewController中的主视图

时间:2013-03-04 22:28:43

标签: ios uisplitviewcontroller

我有一个使用UISplitViewController的应用。在横向方向时,我们有时希望始终显示主视图,有时希望它像纵向一样自动隐藏。目前,此设置可以在app中调整。

这一切都运作良好,除了一件事。当我更改设置时,我希望自动隐藏设置立即生效,而不仅仅是下次旋转设备时(即,当 - splitViewController:shouldHideViewController:inOrientation:被调用时)。

是否有某种方法(以编程方式)强制UISplitViewController弹出/隐藏主视图,以便SVC将再次查询splitViewController:shouldHideViewController:inOrientation:方法?

非常感谢任何帮助。

2 个答案:

答案 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具有相同的行为。