1

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

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

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

任何帮助将不胜感激。

4

2 回答 2

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
}
于 2013-03-04T22:39:29.007 回答
0

对于现有按钮,您可以添加此目标以实现您想要的:

[button addTarget: theSplitViewController action: @selector(toggleMasterVisible:) forControlEvents:UIControlEventTouchUpInside];

我必须假设这意味着你可以打电话

[theSplitViewController toggleMasterVisible: nil];

这完全没有记录,但它与您从 willHideViewController 函数获得的 barButtonItem 具有相同的行为。

于 2014-09-06T01:18:33.597 回答