UINavigationControllerのtopViewControllerのクラスを取得

当ブログのアクセスログを見ていると、「ios クラス名 topviewcontroller」という検索ワードが。UINavigationControllerのtopViewControllerのクラス名を取得したい場合や、クラスごとに処理を分岐させるには、以下のように書けばよい。

ポイント

  • [instance class]とすると、そのインスタンスのクラスオブジェクト(Class)が取得できる
  • NSStringFromClass()関数を使うと、クラスオブジェクトの名前をNSStringに変換できる
  • [instance isMemberOfClass:aClass]とすると、そのインスタンスがaClassのインスタンスである場合のみYESが返ってくる。
  • [instance isKindOfClass:aClass]とすると、そのインスタンスがaClassのインスタンスか、あるいはaClassを継承したクラスのインスタンスかどちらかの場合に、YESが返ってくる

サンプルコード

UIViewController *topViewController = self.navigationController.topViewController;

// クラスを取得してNSStringに変換
NSLog(@"%@", NSStringFromClass([topViewController class]));

// MYSomethingViewControllerである場合
if ([topViewController isMemberOfClass:[MYSomethingViewController class]]) {
	MYSomethingViewController *somethingViewController = (MYSomethingViewController *)topViewController;
	[somethingViewController description];
}

// UITableViewControllerか、それを継承したクラスだった場合
if ([topViewController isKindOfClass:[UITableViewController class]]) {
	UITableViewController *tableViewController = (UITableViewController *)topViewController;
	[tableViewController tableView];
}

Pocket
LINEで送る
LinkedIn にシェア

コメントを残す