Я столкнулся с интересным поведением, которое у меня пока нет никаких объяснений, но я уверен, что вы уже знаете его.
Я программно загружаю StoryBoard UIViewController, и мне нужно удалить элемент TabBar из UITabBarController внутри childViewController, расположенного в v c
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"StoryboardiPhone" bundle:nil];
UIViewController *vc = [sb instantiateInitialViewController];
// now we will find the UITabBarController
UITabBarController *tbC = (UITabBarController *)[vc.childViewControllers objectAtIndex:0];
// and finally we remove the UIViewController Code Selection which is index 3
NSMutableArray *viewControllers = (NSMutableArray*) tbC.viewControllers;
[viewControllers removeObjectAtIndex:3];
[tbC setViewControllers:viewControllers];
Интересно, что приведенный выше код не работает и создает sh при попытке доступа к UITabBarController. UITabBarController находится внутри массива childViewController в v c (UIViewController).
Решение, которое я нашел, заключается в простом доступе к UIView из v c, и после этого я могу получить доступ к childViewControllers.
UIView *view = vc.view;
// now we will find the UITabBarController
UITabBarController *tbC = (UITabBarController *)[vc.childViewControllers objectAtIndex:0];
// and finally we remove the UIViewController Code Selection which is index 3
NSMutableArray *viewControllers = (NSMutableArray*) tbC.viewControllers;
[viewControllers removeObjectAtIndex:3];
[tbC setViewControllers:viewControllers];
Знаете ли вы, зачем мне нужен доступ к UIView из v c, чтобы получить доступ к childViewControllers v c? Спасибо!