LoginSignup
0
0

More than 1 year has passed since last update.

Viewが管理する最初のコントローラーを取得する方法

Posted at

はじめに

備忘録がてら誰かの役に立てればと考え、投稿することにしました。今回はViewが管理する最初のコントローラーを取得する方法を書いていきたいと思います。

メソッド

こちらのメソッドを使ってコントローラーを取得します。こちらはUIViewのプライベートメソッドなのでご注意を。

- (id)_viewControllerForAncestor;

使用例

このメソッドを使うことになった経緯として、ロック画面のミュージックプレイヤーをコンパクトな形にするTweakを作成する際に、コントロールセンターとのミュージックプレーヤーと区別するために利用しました。以下にそのコードを書いておきます。

Tweak.xm

%hook MRUNowPlayingControlsView //再生ボタンなどのコントロール関連のクラス
-(void)layoutSubviews
{
    %orig;
    MRUNowPlayingViewController* controller = (MRUNowPlayingViewController *)[self _viewControllerForAncestor]; //自身のUIViewControllerを取得。
    if ([controller respondsToSelector:@selector(delegate)] && ![controller.delegate isKindOfClass:%c(MRUControlCenterViewController)]) //取得したコントローラーにdelegateがあるかの確認と自身がMRUControlCenterViewControllerに属していないことの確認。
    {
        self.hidden = YES; //非表示
    }
}
%end

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0