假设您有一个UIViewController名为 的子类,并且您在一个集合BeverageViewController中使用此控制器的四个独立实例。UITabBarController你还有一个数据结构,比如说,四个NSString字符串对象,@"Beer", @"Wine",@"Whiskey"和@"More Whiskey"。每个字符串对应一个BeverageViewController实例,该实例将使用该字符串作为其视图中的文本标签。因此,当一个特定的BeverageViewController实例正在执行它的viewDidLoad方法时,它期望有一个分配有这四个字符串之一的公共属性。
当在层次结构中有这样一个控制器作为 segue 目的地UINavigationController时,通常在调用prepareForSegue:sender:之前设置此目的地控制器的属性。viewDidLoad
viewDidLoad当控制器是集合的一部分时,我一直在探索如何设置控制器属性UITabBarController。我已经确定实现 aUITabBarControllerDelegate的tabBarController:shouldSelectViewController:方法是一种好的方法,除了你必须四处寻找控制器的相关选项卡索引:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
NSInteger index = [tabBarController.viewControllers indexOfObject:viewController];
BeverageController *controller = (BeverageController *)viewController;
controller.beverageName = self.beverageNames[index];
return YES;
}
不要被愚弄:你不能使用tabBarController.selectedIndex; 您不能使用委托方法tabBarController:didSelectViewController:,因为此方法会在viewDidLoad. 此外,您不能self.tabBarController.selectedIndex在控制器的实现中使用viewDidLoad. 这三种方法似乎是最明显的,但它们并不能促进上述目标。
哦,lawd,lawd,如果只是tabBarController:didSelectViewController:在控制器的viewDidLoad方法之前被解雇。但事实并非如此。它也不是先于viewWillAppear,并且准备内部的观点viewDidAppear是愚蠢的。
在集合中设置控制器属性的最佳方法是什么UITabBarController,使人们能够访问viewDidLoad方法中的属性,而无需放弃 IB 并以程序方式管理UITabBarController?是我上面的方法吗?是实现自定义UITabBarController并操纵其viewControllers属性中的控制器吗?还是我错过了 APIobvious?