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