当ブログのアクセスログを見ていると、「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]; }