1

UISplitViewController を使用するアプリがあります。横向きの場合、常にマスター ビューを表示したい場合や、縦向きの場合のように自動的に非表示にしたい場合があります。現在、この設定はアプリで微調整できます。

1 つのことを除いて、これはすべてうまく機能します。設定を変更したら、次にデバイスを回転させたとき (つまり、splitViewController:shouldHideViewController:inOrientation: が呼び出されたとき) だけでなく、自動非表示設定がすぐに有効になるようにしたいと思います。

SVC が splitViewController:shouldHideViewController:inOrientation: メソッドを再度クエリするように、(プログラムで) UISplitViewController をポップアウト/マスター ビューを非表示にする方法はありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

3

簡単な方法はありません。

機能的でありながら少しハッキーな解決策は、デリゲートを設定し、マスターを表示/非表示にするときにデリゲートに渡された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 に答える