2012-01-19 85 views
5

我使用iOS 5与故事板。我的UITabBar是使用Interface Builder创建的。我的TabBar中有两个相似的项目,它们是相同的列表,只是其中有不同类型的项目。我所做的,但看起来很奇怪,正在为每个UITableViewviewDidLoad设置一个不同的“标签”,然后根据标签分配正确的类型。UITabBar - 两个视图(笔尖)相同的类使用故事板

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (self.tableView.tag == 1) 
    { 
     type = @"lent"; 
    } 
    else if (self.tableView.tag == 2) 
    { 
     type = @"borrowed"; 
    } 
} 

还有更好的方法吗?我没有在代码中创建我的UITabBar,所以我的AppDelegate非常空!我设置的类型只是我的一个核心数据实体中的一个属性,在一个列表中我有借用项目,另一个是我有Lent项目,但它们是同一个实体。

回答

3

,可以将该类型的普通视图控制器上的属性,并选择相应的标签栏项目时设置(从UITabBarControllerDelegate协议tabBarController:didSelectViewController: - 应用程序委托将标签栏控制器代表)。

您可以如下设置它。声明您的应用程序委托符合UITabBarControllerDelegate协议,然后将其设置为标签栏控制器的委托(因为应用程序委托不可连接到故事板中,您必须在代码中执行此操作)。在您的applicationDidFinishLaunching,添加下面的返回YES前:

UITabBarController *tbc = (UITabBarController*)self.window.rootViewController; 
tbc.delegate = self; 

然后执行以下的委托方法:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 

    switch (tabBarController.tabBar.selectedItem.tag) 
    { 
     case 1: 
      viewController.property = @"propertyA"; 
      break; 
     case 2: 
      viewController.property = @"propertyB"; 
      break; 
    } 

    NSLog(@"view controller is %@",viewController); 

} 

你需要到ViewController变量转换为实际的视图控制器类,和还将相关标签分配给每个视图控制器的标签栏项目。

+0

嗯,解决方案看起来不错!所以我只是把tabBarController:didSelectViewController:在我的应用程序委托?明天早上将会拍摄这张照片,并会继续发布。谢谢! – allaire

+0

您还需要将应用程序委托设置为标签栏控制器的委托,并声明您的应用程序委托符合协议。 – jrturton

+0

你有没有时间分享一小段代码,我试过的没有工作:/ – allaire

1

你在那里应该工作得很好。另一个选择是拥有一个具有所有功能的通用UIViewController超类,然后对该基类进行子类化,并提供一个设置适当类型的viewDidLoad实现。然后在Interface Builder中,可以将UITabBar视图控制器设置为适当的子类型。

结果将是一样的,但是在IB中可能会更清楚发生了什么,因为您不必依赖于记住每个数字标记的含义。

+0

感谢您的建议:) – allaire

相关问题